home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 11 - 1995 / 11.02 Feb 95 / 11.02 Challenge / transform.h < prev   
Encoding:
C/C++ Source or Header  |  1994-12-10  |  56.6 KB  |  2,008 lines  |  [TEXT/????]

  1. /* 
  2.  * F1move transforms the cube in response to a clockwise
  3.  * turn of the Front face.  F3move represents a counter-
  4.  * clockwise turn.  Similarly for the other faces.
  5.  */
  6. #define F1move \
  7.   Rot4(ULF_U,DLF_L,DRF_D,URF_R); \
  8.   Rot4(ULF_L,DLF_D,DRF_R,URF_U); \
  9.   Rot4(ULF_F,DLF_F,DRF_F,URF_F); \
  10.   Rot4(UF_U,LF_L,DF_D,RF_R); \
  11.   Rot4(UF_F,LF_F,DF_F,RF_F);
  12.  
  13. #define F3move \
  14.   Rot4(ULF_U,URF_R,DRF_D,DLF_L); \
  15.   Rot4(ULF_L,URF_U,DRF_R,DLF_D); \
  16.   Rot4(ULF_F,URF_F,DRF_F,DLF_F); \
  17.   Rot4(UF_U,RF_R,DF_D,LF_L); \
  18.   Rot4(UF_F,RF_F,DF_F,LF_F);
  19.  
  20. #define L1move \
  21.   Rot4(ULF_U,ULB_B,DLB_D,DLF_F); \
  22.   Rot4(ULF_L,ULB_L,DLB_L,DLF_L); \
  23.   Rot4(ULF_F,ULB_U,DLB_B,DLF_D); \
  24.   Rot4(UL_U,LB_B,DL_D,LF_F); \
  25.   Rot4(UL_L,LB_L,DL_L,LF_L);
  26.  
  27. #define L3move \
  28.   Rot4(ULF_U,DLF_F,DLB_D,ULB_B); \
  29.   Rot4(ULF_L,DLF_L,DLB_L,ULB_L); \
  30.   Rot4(ULF_F,DLF_D,DLB_B,ULB_U); \
  31.   Rot4(UL_U,LF_F,DL_D,LB_B); \
  32.   Rot4(UL_L,LF_L,DL_L,LB_L); 
  33.  
  34. #define R1move \
  35.   Rot4(URF_U,DRF_F,DRB_D,URB_B); \
  36.   Rot4(URF_R,DRF_R,DRB_R,URB_R); \
  37.   Rot4(URF_F,DRF_D,DRB_B,URB_U); \
  38.   Rot4(UR_U,RF_F,DR_D,RB_B); \
  39.   Rot4(UR_R,RF_R,DR_R,RB_R);
  40.  
  41. #define R3move \
  42.   Rot4(URF_U,URB_B,DRB_D,DRF_F); \
  43.   Rot4(URF_R,URB_R,DRB_R,DRF_R); \
  44.   Rot4(URF_F,URB_U,DRB_B,DRF_D); \
  45.   Rot4(UR_U,RB_B,DR_D,RF_F); \
  46.   Rot4(UR_R,RB_R,DR_R,RF_R);
  47.  
  48. #define B1move \
  49.   Rot4(ULB_U,URB_R,DRB_D,DLB_L); \
  50.   Rot4(ULB_L,URB_U,DRB_R,DLB_D); \
  51.   Rot4(ULB_B,URB_B,DRB_B,DLB_B); \
  52.   Rot4(UB_U,RB_R,DB_D,LB_L); \
  53.   Rot4(UB_B,RB_B,DB_B,LB_B);
  54.  
  55. #define B3move \
  56.   Rot4(ULB_U,DLB_L,DRB_D,URB_R); \
  57.   Rot4(ULB_L,DLB_D,DRB_R,URB_U); \
  58.   Rot4(ULB_B,DLB_B,DRB_B,URB_B); \
  59.   Rot4(UB_U,LB_L,DB_D,RB_R); \
  60.   Rot4(UB_B,LB_B,DB_B,RB_B);
  61.  
  62. #define U1move \
  63.   Rot4(ULF_U,URF_U,URB_U,ULB_U); \
  64.   Rot4(ULF_L,URF_F,URB_R,ULB_B); \
  65.   Rot4(ULF_F,URF_R,URB_B,ULB_L); \
  66.   Rot4(UL_U,UF_U,UR_U,UB_U); \
  67.   Rot4(UL_L,UF_F,UR_R,UB_B);
  68.  
  69. #define U3move \
  70.   Rot4(ULF_U,ULB_U,URB_U,URF_U); \
  71.   Rot4(ULF_L,ULB_B,URB_R,URF_F); \
  72.   Rot4(ULF_F,ULB_L,URB_B,URF_R); \
  73.   Rot4(UL_U,UB_U,UR_U,UF_U); \
  74.   Rot4(UL_L,UB_B,UR_R,UF_F);
  75.  
  76. #define D1move \
  77.   Rot4(DLF_D,DLB_D,DRB_D,DRF_D); \
  78.   Rot4(DLF_L,DLB_B,DRB_R,DRF_F); \
  79.   Rot4(DLF_F,DLB_L,DRB_B,DRF_R); \
  80.   Rot4(DL_D,DB_D,DR_D,DF_D); \
  81.   Rot4(DL_L,DB_B,DR_R,DF_F);
  82.  
  83. #define D3move \
  84.   Rot4(DLF_D,DRF_D,DRB_D,DLB_D); \
  85.   Rot4(DLF_L,DRF_F,DRB_R,DLB_B); \
  86.   Rot4(DLF_F,DRF_R,DRB_B,DLB_L); \
  87.   Rot4(DL_D,DF_D,DR_D,DB_D); \
  88.   Rot4(DL_L,DF_F,DR_R,DB_B); 
  89.  
  90. /*
  91.  * This file contains the permutations used to transform
  92.  * the cube during the calculation of the solution during
  93.  * the first call to SolveRubiksCube.
  94.  */
  95. #define F1 F1move; M(F);
  96. #define F3 F3move; M(f);
  97. #define L1 L1move; M(L);
  98. #define L3 L3move; M(l);
  99. #define R1 R1move; M(R);
  100. #define R3 R3move; M(r);
  101. #define B1 B1move; M(B);
  102. #define B3 B3move; M(b);
  103. #define U1 U1move; M(U);
  104. #define U3 U3move; M(u);
  105. #define D1 D1move; M(D);
  106. #define D3 D3move; M(d);
  107.  
  108. #define F2 \
  109.   Rot2(ULF_U,DRF_D); Rot2(ULF_L,DRF_R); \
  110.   Rot2(ULF_F,DRF_F); Rot2(DLF_D,URF_U); \
  111.   Rot2(DLF_L,URF_R); Rot2(DLF_F,URF_F); \
  112.   Rot2(UF_U,DF_D);   Rot2(UF_F,DF_F); \
  113.   Rot2(LF_L,RF_R);   Rot2(LF_F,RF_F); \
  114.   M(F);M(F);
  115.  
  116. #define L2 \
  117.   Rot2(ULF_U,DLB_D); Rot2(ULF_L,DLB_L); \
  118.   Rot2(ULF_F,DLB_B); Rot2(DLF_D,ULB_U); \
  119.   Rot2(DLF_L,ULB_L); Rot2(DLF_F,ULB_B); \
  120.   Rot2(UL_U,DL_D);   Rot2(UL_L,DL_L); \
  121.   Rot2(LF_L,LB_L);   Rot2(LF_F,LB_B); \
  122.   M(L);M(L);
  123.  
  124. #define R2 \
  125.   Rot2(URF_U,DRB_D); Rot2(URF_R,DRB_R); \
  126.   Rot2(URF_F,DRB_B); Rot2(DRF_D,URB_U); \
  127.   Rot2(DRF_R,URB_R); Rot2(DRF_F,URB_B); \
  128.   Rot2(UR_U,DR_D);   Rot2(UR_R,DR_R); \
  129.   Rot2(RF_R,RB_R);   Rot2(RF_F,RB_B); \
  130.   M(R);M(R);
  131.  
  132. #define B2 \
  133.   Rot2(ULB_U,DRB_D); Rot2(ULB_L,DRB_R); \
  134.   Rot2(ULB_B,DRB_B); Rot2(DLB_D,URB_U); \
  135.   Rot2(DLB_L,URB_R); Rot2(DLB_B,URB_B); \
  136.   Rot2(UB_U,DB_D);   Rot2(UB_B,DB_B); \
  137.   Rot2(LB_L,RB_R);   Rot2(LB_B,RB_B); \
  138.   M(B);M(B);
  139.  
  140. #define U2 \
  141.   Rot2(ULF_U,URB_U); Rot2(ULF_L,URB_R); \
  142.   Rot2(ULF_F,URB_B); Rot2(URF_U,ULB_U); \
  143.   Rot2(URF_R,ULB_L); Rot2(URF_F,ULB_B); \
  144.   Rot2(UL_U,UR_U);   Rot2(UL_L,UR_R); \
  145.   Rot2(UF_U,UB_U);   Rot2(UF_F,UB_B); \
  146.   M(U);M(U);
  147.  
  148. #define D2 \
  149.   Rot2(DLF_D,DRB_D); Rot2(DLF_L,DRB_R); \
  150.   Rot2(DLF_F,DRB_B); Rot2(DRF_D,DLB_D); \
  151.   Rot2(DRF_R,DLB_L); Rot2(DRF_F,DLB_B); \
  152.   Rot2(DL_D,DR_D);   Rot2(DL_L,DR_R); \
  153.   Rot2(DF_D,DB_D);   Rot2(DF_F,DB_B); \
  154.   M(D);M(D);
  155.  
  156. /* Upper layer transforms */
  157.  
  158. /*      R3;D1;R1; */
  159. #define R3D1R1 \
  160.   Rot4(DLF_D,DLB_D,DRF_F,URF_F); \
  161.   Rot4(DLF_L,DLB_B,DRF_R,URF_U); \
  162.   Rot4(DLF_F,DLB_L,DRF_D,URF_R); \
  163.   Rot4(RF_R,DF_F,DL_L,DB_B); \
  164.   Rot4(RF_F,DF_D,DL_D,DB_D); \
  165.   M(r);M(D);M(R);
  166.  
  167. /*      B3;D1;B1; */
  168. #define B3D1B1 \
  169.   Rot4(DLF_D,DRB_R,URB_R,DRF_D); \
  170.   Rot4(DLF_L,DRB_B,URB_U,DRF_F); \
  171.   Rot4(DLF_F,DRB_D,URB_B,DRF_R); \
  172.   Rot4(RB_R,DR_D,DF_D,DL_D); \
  173.   Rot4(RB_B,DR_R,DF_F,DL_L); \
  174.   M(b);M(D);M(B);
  175.  
  176. /*      L3;D1;L1; */
  177. #define L3D1L1 \
  178.   Rot4(DRF_D,DLB_B,ULB_B,DRB_D); \
  179.   Rot4(DRF_R,DLB_D,ULB_L,DRB_B); \
  180.   Rot4(DRF_F,DLB_L,ULB_U,DRB_R); \
  181.   Rot4(LB_L,DB_B,DR_R,DF_F); \
  182.   Rot4(LB_B,DB_D,DR_D,DF_D); \
  183.   M(l);M(D);M(L);
  184.  
  185. /*      R1;D1;R3; */
  186. #define R1D1R3 \
  187.   Rot4(DLF_D,DLB_D,URB_B,DRB_B); \
  188.   Rot4(DLF_L,DLB_B,URB_R,DRB_D); \
  189.   Rot4(DLF_F,DLB_L,URB_U,DRB_R); \
  190.   Rot4(RB_R,DF_F,DL_L,DB_B); \
  191.   Rot4(RB_B,DF_D,DL_D,DB_D); \
  192.   M(R);M(D);M(r);
  193.  
  194. /*      B3;D3;B1; */
  195. #define B3D3B1 \
  196.   Rot4(DLF_D,DRF_D,URB_R,DRB_R); \
  197.   Rot4(DLF_L,DRF_F,URB_U,DRB_B); \
  198.   Rot4(DLF_F,DRF_R,URB_B,DRB_D); \
  199.   Rot4(RB_R,DL_D,DF_D,DR_D); \
  200.   Rot4(RB_B,DL_L,DF_F,DR_R); \
  201.   M(b);M(d);M(B);
  202.  
  203. /*      B1;D1;B3; */
  204. #define B1D1B3 \
  205.   Rot4(DLF_D,ULB_L,DLB_L,DRF_D); \
  206.   Rot4(DLF_L,ULB_B,DLB_D,DRF_F); \
  207.   Rot4(DLF_F,ULB_U,DLB_B,DRF_R); \
  208.   Rot4(LB_L,DR_D,DF_D,DL_D); \
  209.   Rot4(LB_B,DR_R,DF_F,DL_L); \
  210.   M(B);M(D);M(b);
  211.  
  212. /*      L3;D3;L1; */
  213. #define L3D3L1 \
  214.   Rot4(DRF_D,DRB_D,ULB_B,DLB_B); \
  215.   Rot4(DRF_R,DRB_B,ULB_L,DLB_D); \
  216.   Rot4(DRF_F,DRB_R,ULB_U,DLB_L); \
  217.   Rot4(LB_L,DF_F,DR_R,DB_B); \
  218.   Rot4(LB_B,DF_D,DR_D,DB_D); \
  219.   M(l);M(d);M(L);
  220.  
  221. /*      L3;D1;L1;D2;L3;D3;L1; */
  222. #define L3D1L1D2L3D3L1 \
  223.   Rot2(DLF_D,DRF_D); \
  224.   Rot2(DLF_L,DRF_F); \
  225.   Rot2(DLF_F,DRF_R); \
  226.   Rot2(ULB_U,DLB_D); \
  227.   Rot2(ULB_L,DLB_B); \
  228.   Rot2(ULB_B,DLB_L); \
  229.   Rot2(LB_L,DR_R); \
  230.   Rot2(LB_B,DR_D); \
  231.   Rot2(DL_D,DF_D); \
  232.   Rot2(DL_L,DF_F); \
  233.   M(l);M(D);M(L);M(D);M(D);M(l);M(d);M(L);
  234.  
  235. /*      L1;D1;L3; */
  236. #define L1D1L3 \
  237.   Rot4(ULF_U,DLF_L,DRB_B,DRF_R); \
  238.   Rot4(ULF_L,DLF_D,DRB_R,DRF_F); \
  239.   Rot4(ULF_F,DLF_F,DRB_D,DRF_D); \
  240.   Rot4(LF_L,DB_B,DR_R,DF_F); \
  241.   Rot4(LF_F,DB_D,DR_D,DF_D); \
  242.   M(L);M(D);M(l);
  243.  
  244. /*      F3;D3;F1; */
  245. #define F3D3F1 \
  246.   Rot4(ULF_U,DLF_F,DRB_R,DLB_B); \
  247.   Rot4(ULF_L,DLF_L,DRB_D,DLB_D); \
  248.   Rot4(ULF_F,DLF_D,DRB_B,DLB_L); \
  249.   Rot4(LF_L,DR_D,DB_D,DL_D); \
  250.   Rot4(LF_F,DR_R,DB_B,DL_L); \
  251.   M(f);M(d);M(F);
  252.  
  253. /*      F3;D1;F1;D2;F3;D3;F1; */
  254. #define F3D1F1D2F3D3F1 \
  255.   Rot2(ULF_U,DLF_D); \
  256.   Rot2(ULF_L,DLF_F); \
  257.   Rot2(ULF_F,DLF_L); \
  258.   Rot2(DRF_D,DRB_D); \
  259.   Rot2(DRF_R,DRB_B); \
  260.   Rot2(DRF_F,DRB_R); \
  261.   Rot2(LF_L,DB_D); \
  262.   Rot2(LF_F,DB_B); \
  263.   Rot2(DR_D,DF_D); \
  264.   Rot2(DR_R,DF_F); \
  265.   M(f);M(D);M(F);M(D);M(D);M(f);M(d);M(F);
  266.  
  267.  
  268. /*      B3;D1;B1;D2;B3;D3;B1; */
  269. #define B3D1B1D2B3D3B1 \
  270.   Rot2(DLF_D,DLB_D); \
  271.   Rot2(DLF_L,DLB_B); \
  272.   Rot2(DLF_F,DLB_L); \
  273.   Rot2(URB_U,DRB_D); \
  274.   Rot2(URB_R,DRB_B); \
  275.   Rot2(URB_B,DRB_R); \
  276.   Rot2(RB_R,DF_D); \
  277.   Rot2(RB_B,DF_F); \
  278.   Rot2(DL_D,DB_D); \
  279.   Rot2(DL_L,DB_B); \
  280.   M(b);M(D);M(B);M(D);M(D);M(b);M(d);M(B);
  281.   
  282. /*      F3;D1;F1; */
  283. #define F3D1F1 \
  284.   Rot4(ULF_U,DLB_B,DRB_R,DLF_F); \
  285.   Rot4(ULF_L,DLB_D,DRB_D,DLF_L); \
  286.   Rot4(ULF_F,DLB_L,DRB_B,DLF_D); \
  287.   Rot4(LF_L,DL_D,DB_D,DR_D); \
  288.   Rot4(LF_F,DL_L,DB_B,DR_R); \
  289.   M(f);M(D);M(F);
  290.   
  291. /*      F1;D1;F3; */
  292. #define F1D1F3 \
  293.   Rot4(URF_U,DRF_F,DLB_L,DRB_B); \
  294.   Rot4(URF_R,DRF_R,DLB_D,DRB_D); \
  295.   Rot4(URF_F,DRF_D,DLB_B,DRB_R); \
  296.   Rot4(RF_R,DL_D,DB_D,DR_D); \
  297.   Rot4(RF_F,DL_L,DB_B,DR_R); \
  298.   M(F);M(D);M(f);
  299.  
  300. /*      R3;D3;R1; */
  301. #define R3D3R1 \
  302.   Rot4(DLF_D,URF_F,DRF_F,DLB_D); \
  303.   Rot4(DLF_L,URF_U,DRF_R,DLB_B); \
  304.   Rot4(DLF_F,URF_R,DRF_D,DLB_L); \
  305.   Rot4(RF_R,DB_B,DL_L,DF_F); \
  306.   Rot4(RF_F,DB_D,DL_D,DF_D); \
  307.   M(r);M(d);M(R);
  308.  
  309. /*      R3;D1;R1;D2;R3;D3;R1; */
  310. #define R3D1R1D2R3D3R1 \
  311.   Rot2(URF_U,DRF_D); \
  312.   Rot2(URF_R,DRF_F); \
  313.   Rot2(URF_F,DRF_R); \
  314.   Rot2(DLB_D,DRB_D); \
  315.   Rot2(DLB_L,DRB_B); \
  316.   Rot2(DLB_B,DRB_R); \
  317.   Rot2(RF_R,DL_L); \
  318.   Rot2(RF_F,DL_D); \
  319.   Rot2(DR_D,DB_D); \
  320.   Rot2(DR_R,DB_B); \
  321.   M(r);M(D);M(R);M(D);M(D);M(r);M(d);M(R);
  322.   
  323. /*      F2;D1;R1;F3;R3; */
  324. #define F2D1R1F3R3 \
  325.   Rot12(ULF_U,URF_F,DLF_F,DRF_F,ULF_F,URF_U,DLF_D,DRF_R, \
  326.         ULF_L,URF_R,DLF_L,DRF_D); \
  327.   Rot6(DLB_D,DRB_D,DLB_L,DRB_B,DLB_B,DRB_R); \
  328.   Rot2(UF_U,UF_F); \
  329.   Rot3(LF_L,DF_D,RF_R); \
  330.   Rot3(LF_F,DF_F,RF_F); \
  331.   Rot6(DL_D,DB_D,DR_D,DL_L,DB_B,DR_R); \
  332.   M(F);M(F);M(D);M(R);M(f);M(r);
  333.  
  334. /*      R3;F3; */
  335. #define R3F3 \
  336.   Rot15(ULF_U,URB_R,DRB_R,DRF_R,DLF_D,ULF_L,URB_B,DRB_D, \
  337.         DRF_F,DLF_F,ULF_F,URB_U,DRB_B,DRF_D,DLF_L); \
  338.   Rot3(URF_U,URF_R,URF_F); \
  339.   Rot7(UR_U,RB_B,DR_D,RF_F,DF_F,LF_F,UF_F); \
  340.   Rot7(UR_R,RB_R,DR_R,RF_R,DF_D,LF_L,UF_U); \
  341.   M(r);M(f);
  342.  
  343. /*      B2;D3;R1;F3;R3; */
  344. #define B2D3R1F3R3 \
  345.   Rot7(ULF_U,ULB_B,DRB_B,DRF_F,URB_B,DLB_B,DLF_L); \
  346.   Rot7(ULF_L,ULB_L,DRB_R,DRF_D,URB_U,DLB_D,DLF_D); \
  347.   Rot7(ULF_F,ULB_U,DRB_D,DRF_R,URB_R,DLB_L,DLF_F); \
  348.   Rot12(UF_U,UB_B,DB_B,DL_L,DF_F,LF_F,UF_F,UB_U,DB_D,DL_D, \
  349.         DF_D,LF_L); \
  350.   Rot2(LB_L,RB_R); \
  351.   Rot2(LB_B,RB_B); \
  352.   Rot2(DR_D,DR_R); \
  353.   M(B);M(B);M(d);M(R);M(f);M(r);
  354.  
  355. /*      L1;F1; */
  356. #define L1F1 \
  357.   Rot3(ULF_U,ULF_L,ULF_F); \
  358.   Rot15(DLF_D,DRF_R,URF_U,ULB_L,DLB_L,DLF_L,DRF_D,URF_R, \
  359.         ULB_B,DLB_D,DLF_F,DRF_F,URF_F,ULB_U,DLB_B); \
  360.   Rot7(UL_U,LB_B,DL_D,LF_F,DF_F,RF_F,UF_F); \
  361.   Rot7(UL_L,LB_L,DL_L,LF_L,DF_D,RF_R,UF_U); \
  362.   M(L);M(F);
  363.  
  364. /*      R2;D3;F2; */
  365. #define R2D3F2 \
  366.   Rot4(ULF_U,URF_U,URB_U,DRF_D); \
  367.   Rot4(ULF_L,URF_F,URB_R,DRF_R); \
  368.   Rot4(ULF_F,URF_R,URB_B,DRF_F); \
  369.   Rot3(DLF_D,DRB_D,DLB_D); \
  370.   Rot3(DLF_L,DRB_R,DLB_B); \
  371.   Rot3(DLF_F,DRB_B,DLB_L); \
  372.   Rot6(UR_U,DR_D,DB_D,DL_D,DF_D,UF_U); \
  373.   Rot6(UR_R,DR_R,DB_B,DL_L,DF_F,UF_F); \
  374.   Rot3(LF_L,RB_R,RF_R); \
  375.   Rot3(LF_F,RB_B,RF_F); \
  376.   M(R);M(R);M(d);M(F);M(F);
  377.  
  378. /*      B2;D2;F2; */
  379. #define B2D2F2 \
  380.   Rot4(ULF_U,URB_U,DLB_D,DRF_D); \
  381.   Rot4(ULF_L,URB_R,DLB_L,DRF_R); \
  382.   Rot4(ULF_F,URB_B,DLB_B,DRF_F); \
  383.   Rot4(DLF_D,URF_U,ULB_U,DRB_D); \
  384.   Rot4(DLF_L,URF_R,ULB_L,DRB_R); \
  385.   Rot4(DLF_F,URF_F,ULB_B,DRB_B); \
  386.   Rot4(UF_U,UB_U,DB_D,DF_D); \
  387.   Rot4(UF_F,UB_B,DB_B,DF_F); \
  388.   Rot2(LF_L,RF_R); \
  389.   Rot2(LF_F,RF_F); \
  390.   Rot2(LB_L,RB_R); \
  391.   Rot2(LB_B,RB_B); \
  392.   Rot2(DL_D,DR_D); \
  393.   Rot2(DL_L,DR_R); \
  394.   M(B);M(B);M(D);M(D);M(F);M(F);
  395.  
  396. /*      L2;D1;F2; */
  397. #define L2D1F2 \
  398.   Rot4(ULF_U,ULB_U,DLF_D,URF_U); \
  399.   Rot4(ULF_L,ULB_B,DLF_F,URF_F); \
  400.   Rot4(ULF_F,ULB_L,DLF_L,URF_R); \
  401.   Rot3(DRF_D,DLB_D,DRB_D); \
  402.   Rot3(DRF_R,DLB_L,DRB_B); \
  403.   Rot3(DRF_F,DLB_B,DRB_R); \
  404.   Rot6(UL_U,DL_D,DB_D,DR_D,DF_D,UF_U); \
  405.   Rot6(UL_L,DL_L,DB_B,DR_R,DF_F,UF_F); \
  406.   Rot3(LF_L,RF_R,LB_L); \
  407.   Rot3(LF_F,RF_F,LB_B); \
  408.   M(L);M(L);M(D);M(F);M(F);
  409.  
  410. /*      B3;D3;B1;R1;F3;R3; */
  411. #define B3D3B1R1F3R3 \
  412.   Rot5(ULF_U,URB_B,DRB_D,DRF_R,DLF_L); \
  413.   Rot5(ULF_L,URB_U,DRB_B,DRF_F,DLF_D); \
  414.   Rot5(ULF_F,URB_R,DRB_R,DRF_D,DLF_F); \
  415.   Rot10(UF_U,RB_B,DL_L,DF_F,LF_F,UF_F,RB_R,DL_D,DF_D,LF_L);\
  416.   Rot2(DR_D,DR_R); \
  417.   M(b);M(d);M(B);M(R);M(f);M(r);
  418.  
  419. /*      B1;D2;B3;F2; */
  420. #define B1D2B3F2 \
  421.   Rot3(ULF_U,ULB_L,DRF_D); \
  422.   Rot3(ULF_L,ULB_U,DRF_R); \
  423.   Rot3(ULF_F,ULB_B,DRF_F); \
  424.   Rot3(DLF_D,URF_U,DLB_L); \
  425.   Rot3(DLF_L,URF_R,DLB_D); \
  426.   Rot3(DLF_F,URF_F,DLB_B); \
  427.   Rot3(UF_U,LB_L,DF_D); \
  428.   Rot3(UF_F,LB_B,DF_F); \
  429.   Rot2(LF_L,RF_R); \
  430.   Rot2(LF_F,RF_F); \
  431.   Rot2(DL_D,DR_D); \
  432.   Rot2(DL_L,DR_R); \
  433.   M(B);M(D);M(D);M(b);M(F);M(F);
  434.  
  435. /*      L1;D1;L3;F2; */
  436. #define L1D1L3F2 \
  437.   Rot3(ULF_U,ULF_F,ULF_L); \
  438.   Rot12(DLF_D,URF_U,DRB_R,DRF_F,DLF_F,URF_F,DRB_D,DRF_D, \
  439.         DLF_L,URF_R,DRB_B,DRF_R); \
  440.   Rot6(UF_U,LF_F,RF_F,DB_D,DR_D,DF_D); \
  441.   Rot6(UF_F,LF_L,RF_R,DB_B,DR_R,DF_F); \
  442.   M(L);M(D);M(l);M(F);M(F);
  443.  
  444. /*      F1;D1;R1;F3;R3; */
  445. #define F1D1R1F3R3 \
  446.   Rot9(ULF_U,DRF_F,URF_F,ULF_F,DRF_R,URF_U,ULF_L,DRF_D, \
  447.        URF_R); \
  448.   Rot6(DLB_D,DRB_D,DLB_L,DRB_B,DLB_B,DRB_R); \
  449.   Rot4(UF_U,RF_F,UF_F,RF_R); \
  450.   Rot6(DL_D,DB_D,DR_D,DL_L,DB_B,DR_R); \
  451.   M(F);M(D);M(R);M(f);M(r);
  452.  
  453. /*      R2;F3;R2; */
  454. #define R2F3R2 \
  455.   Rot4(ULF_U,DRB_R,URB_U,DLF_L); \
  456.   Rot4(ULF_L,DRB_D,URB_R,DLF_D); \
  457.   Rot4(ULF_F,DRB_B,URB_B,DLF_F); \
  458.   Rot4(UF_U,RB_R,DF_D,LF_L); \
  459.   Rot4(UF_F,RB_B,DF_F,LF_F); \
  460.   M(R);M(R);M(f);M(R);M(R);
  461.  
  462. /*      B1;D3;B3;R1;F3;R3; */
  463. #define B1D3B3R1F3R3 \
  464.   Rot12(ULF_U,DLB_B,ULB_U,DLF_F,ULF_F,DLB_L,ULB_L,DLF_D, \
  465.         ULF_L,DLB_D,ULB_B,DLF_L); \
  466.   Rot6(DRF_D,DRB_D,DRF_R,DRB_B,DRF_F,DRB_R); \
  467.   Rot10(UF_U,LB_B,DL_L,DF_F,LF_F,UF_F,LB_L,DL_D,DF_D,LF_L);\
  468.   Rot2(DR_D,DR_R); \
  469.   M(B);M(d);M(b);M(R);M(f);M(r);
  470.  
  471. /*      D1;R1;F3;R3; */
  472. #define D1R1F3R3 \
  473.   Rot6(ULF_U,DLF_F,ULF_F,DLF_D,ULF_L,DLF_L); \
  474.   Rot6(DLB_D,DRB_D,DLB_L,DRB_B,DLB_B,DRB_R); \
  475.   Rot6(UF_U,DF_F,LF_F,UF_F,DF_D,LF_L); \
  476.   Rot6(DL_D,DB_D,DR_D,DL_L,DB_B,DR_R); \
  477.   M(D);M(R);M(f);M(r);
  478.  
  479. /*      R1;F3;R3; */
  480. #define R1F3R3 \
  481.   Rot4(ULF_U,DRF_R,DRB_B,DLF_L); \
  482.   Rot4(ULF_L,DRF_F,DRB_R,DLF_D); \
  483.   Rot4(ULF_F,DRF_D,DRB_D,DLF_F); \
  484.   Rot4(UF_U,DR_R,DF_D,LF_L); \
  485.   Rot4(UF_F,DR_D,DF_F,LF_F); \
  486.   M(R);M(f);M(r);
  487.  
  488. /*      D3;R1;F3;R3; */
  489. #define D3R1F3R3 \
  490.   Rot5(ULF_U,DRB_B,DRF_F,DLB_B,DLF_L); \
  491.   Rot5(ULF_L,DRB_R,DRF_D,DLB_D,DLF_D); \
  492.   Rot5(ULF_F,DRB_D,DRF_R,DLB_L,DLF_F); \
  493.   Rot10(UF_U,DB_B,DL_L,DF_F,LF_F,UF_F,DB_D,DL_D,DF_D,LF_L);\
  494.   Rot2(DR_D,DR_R); \
  495.   M(d);M(R);M(f);M(r);
  496.  
  497. /*      L3;F1;L1; */
  498. #define L3F1L1 \
  499.   Rot4(DLF_D,DLB_D,DRF_F,URF_F); \
  500.   Rot4(DLF_L,DLB_B,DRF_R,URF_U); \
  501.   Rot4(DLF_F,DLB_L,DRF_D,URF_R); \
  502.   Rot4(UF_U,DL_L,DF_D,RF_R); \
  503.   Rot4(UF_F,DL_D,DF_F,RF_F); \
  504.   M(l);M(F);M(L);
  505.  
  506. /*      D3;F2; */
  507. #define D3F2 \
  508.   Rot6(ULF_U,DRB_D,DLB_D,DLF_D,URF_U,DRF_D); \
  509.   Rot6(ULF_L,DRB_B,DLB_L,DLF_F,URF_F,DRF_R); \
  510.   Rot6(ULF_F,DRB_R,DLB_B,DLF_L,URF_R,DRF_F); \
  511.   Rot5(UF_U,DR_D,DB_D,DL_D,DF_D); \
  512.   Rot5(UF_F,DR_R,DB_B,DL_L,DF_F); \
  513.   Rot2(LF_L,RF_R); \
  514.   Rot2(LF_F,RF_F); \
  515.   M(d);M(F);M(F);
  516.  
  517. /*      D2;F2; */
  518. #define D2F2 \
  519.   Rot3(ULF_U,DLB_D,DRF_D); \
  520.   Rot3(ULF_L,DLB_L,DRF_R); \
  521.   Rot3(ULF_F,DLB_B,DRF_F); \
  522.   Rot3(DLF_D,URF_U,DRB_D); \
  523.   Rot3(DLF_L,URF_R,DRB_R); \
  524.   Rot3(DLF_F,URF_F,DRB_B); \
  525.   Rot3(UF_U,DB_D,DF_D); \
  526.   Rot3(UF_F,DB_B,DF_F); \
  527.   Rot2(LF_L,RF_R); \
  528.   Rot2(LF_F,RF_F); \
  529.   Rot2(DL_D,DR_D); \
  530.   Rot2(DL_L,DR_R); \
  531.   M(D);M(D);M(F);M(F);
  532.  
  533. /*      D1;F2; */
  534. #define D1F2 \
  535.   Rot6(ULF_U,DLF_D,URF_U,DLB_D,DRB_D,DRF_D); \
  536.   Rot6(ULF_L,DLF_F,URF_F,DLB_L,DRB_B,DRF_R); \
  537.   Rot6(ULF_F,DLF_L,URF_R,DLB_B,DRB_R,DRF_F); \
  538.   Rot5(UF_U,DL_D,DB_D,DR_D,DF_D); \
  539.   Rot5(UF_F,DL_L,DB_B,DR_R,DF_F); \
  540.   Rot2(LF_L,RF_R); \
  541.   Rot2(LF_F,RF_F); \
  542.   M(D);M(F);M(F);
  543.  
  544. /*      F1;R1; */
  545. #define F1R1 \
  546.   Rot15(ULF_U,DLF_L,DRF_D,DRB_B,URB_U,ULF_F,DLF_F,DRF_F, \
  547.         DRB_D,URB_B,ULF_L,DLF_D,DRF_R,DRB_R,URB_R); \
  548.   Rot3(URF_U,URF_F,URF_R); \
  549.   Rot7(UR_U,UF_F,LF_F,DF_F,RF_F,DR_D,RB_B); \
  550.   Rot7(UR_R,UF_U,LF_L,DF_D,RF_R,DR_R,RB_R); \
  551.   M(F);M(R);
  552.  
  553. /*      R2;D1;B1;R3;B3; */
  554. #define R2D1B1R3B3 \
  555.   Rot6(DLF_D,DLB_D,DLF_F,DLB_L,DLF_L,DLB_B); \
  556.   Rot12(URF_U,URB_R,DRF_R,DRB_R,URF_R,URB_U,DRF_D,DRB_B, \
  557.         URF_F,URB_B,DRF_F,DRB_D); \
  558.   Rot2(UR_U,UR_R); \
  559.   Rot3(RF_R,DR_R,RB_R); \
  560.   Rot3(RF_F,DR_D,RB_B); \
  561.   Rot6(DL_D,DB_D,DF_F,DL_L,DB_B,DF_D); \
  562.   M(R);M(R);M(D);M(B);M(r);M(b);
  563.  
  564. /*      B3;R3; */
  565. #define B3R3 \
  566.   Rot15(URF_U,ULB_B,DLB_B,DRB_B,DRF_D,URF_F,ULB_L,DLB_D, \
  567.         DRB_R,DRF_R,URF_R,ULB_U,DLB_L,DRB_D,DRF_F); \
  568.   Rot3(URB_U,URB_B,URB_R); \
  569.   Rot7(UR_U,UB_B,LB_B,DB_B,RB_B,DR_D,RF_F); \
  570.   Rot7(UR_R,UB_U,LB_L,DB_D,RB_R,DR_R,RF_R); \
  571.   M(b);M(r);
  572.  
  573. /*      L2;D3;B1;R3;B3; */
  574. #define L2D3B1R3B3 \
  575.   Rot7(ULF_U,DLB_D,DRB_B,ULB_B,DLF_F,DRF_R,URF_R); \
  576.   Rot7(ULF_L,DLB_L,DRB_R,ULB_L,DLF_L,DRF_F,URF_U); \
  577.   Rot7(ULF_F,DLB_B,DRB_D,ULB_U,DLF_D,DRF_D,URF_F); \
  578.   Rot12(UL_U,DL_D,DF_D,DR_D,RF_F,UR_U,UL_L,DL_L,DF_F, \
  579.         DR_R,RF_R,UR_R); \
  580.   Rot2(LF_L,LB_L); \
  581.   Rot2(LF_F,LB_B); \
  582.   Rot2(DB_D,DB_B); \
  583.   M(L);M(L);M(d);M(B);M(r);M(b);
  584.  
  585. /*      F2;D1;R2; */
  586. #define F2D1R2 \
  587.   Rot4(ULF_U,DRF_D,URB_U,URF_U); \
  588.   Rot4(ULF_L,DRF_R,URB_R,URF_F); \
  589.   Rot4(ULF_F,DRF_F,URB_B,URF_R); \
  590.   Rot3(DLF_D,DLB_D,DRB_D); \
  591.   Rot3(DLF_L,DLB_B,DRB_R); \
  592.   Rot3(DLF_F,DLB_L,DRB_B); \
  593.   Rot6(UR_U,UF_U,DF_D,DL_D,DB_D,DR_D); \
  594.   Rot6(UR_R,UF_F,DF_F,DL_L,DB_B,DR_R); \
  595.   Rot3(LF_L,RF_R,RB_R); \
  596.   Rot3(LF_F,RF_F,RB_B); \
  597.   M(F);M(F);M(D);M(R);M(R);
  598.  
  599. /*      B2;D3;R2; */
  600. #define B2D3R2 \
  601.   Rot3(DLF_D,DRF_D,DLB_D); \
  602.   Rot3(DLF_L,DRF_F,DLB_B); \
  603.   Rot3(DLF_F,DRF_R,DLB_L); \
  604.   Rot4(URF_U,URB_U,ULB_U,DRB_D); \
  605.   Rot4(URF_R,URB_B,ULB_L,DRB_R); \
  606.   Rot4(URF_F,URB_R,ULB_B,DRB_B); \
  607.   Rot6(UR_U,UB_U,DB_D,DL_D,DF_D,DR_D); \
  608.   Rot6(UR_R,UB_B,DB_B,DL_L,DF_F,DR_R); \
  609.   Rot3(LB_L,RB_R,RF_R); \
  610.   Rot3(LB_B,RB_B,RF_F); \
  611.   M(B);M(B);M(d);M(R);M(R);
  612.  
  613. /*      L2;D2;R2; */
  614. #define L2D2R2 \
  615.   Rot4(ULF_U,DLB_D,DRF_D,URB_U); \
  616.   Rot4(ULF_L,DLB_L,DRF_R,URB_R); \
  617.   Rot4(ULF_F,DLB_B,DRF_F,URB_B); \
  618.   Rot4(DLF_D,DRB_D,URF_U,ULB_U); \
  619.   Rot4(DLF_L,DRB_R,URF_R,ULB_L); \
  620.   Rot4(DLF_F,DRB_B,URF_F,ULB_B); \
  621.   Rot4(UL_U,DL_D,DR_D,UR_U); \
  622.   Rot4(UL_L,DL_L,DR_R,UR_R); \
  623.   Rot2(LF_L,LB_L); \
  624.   Rot2(LF_F,LB_B); \
  625.   Rot2(RF_R,RB_R); \
  626.   Rot2(RF_F,RB_B); \
  627.   Rot2(DF_D,DB_D); \
  628.   Rot2(DF_F,DB_B); \
  629.   M(L);M(L);M(D);M(D);M(R);M(R);
  630.  
  631. /*      F1;D1;F3;R2; */
  632. #define F1D1F3R2 \
  633.   Rot3(URF_U,URF_R,URF_F); \
  634.   Rot12(DRF_D,URB_U,DLB_B,DRB_R,DRF_R,URB_R,DLB_D,DRB_D, \
  635.         DRF_F,URB_B,DLB_L,DRB_B); \
  636.   Rot6(UR_U,RF_R,RB_R,DL_D,DB_D,DR_D); \
  637.   Rot6(UR_R,RF_F,RB_B,DL_L,DB_B,DR_R); \
  638.   M(F);M(D);M(f);M(R);M(R);
  639.  
  640. /*      L3;D3;L1;B1;R3;B3; */
  641. #define L3D3L1B1R3B3 \
  642.   Rot5(URF_U,ULB_L,DLB_D,DRB_B,DRF_F); \
  643.   Rot5(URF_R,ULB_B,DLB_B,DRB_D,DRF_R); \
  644.   Rot5(URF_F,ULB_U,DLB_L,DRB_R,DRF_D); \
  645.   Rot10(UR_U,LB_L,DF_F,DR_R,RF_R,UR_R,LB_B,DF_D,DR_D,RF_F);\
  646.   Rot2(DB_D,DB_B); \
  647.   M(l);M(d);M(L);M(B);M(r);M(b);
  648.  
  649. /*      L1;D2;L3;R2; */
  650. #define L1D2L3R2 \
  651.   Rot3(ULF_U,DRB_B,URF_F); \
  652.   Rot3(ULF_L,DRB_R,URF_R); \
  653.   Rot3(ULF_F,DRB_D,URF_U); \
  654.   Rot3(DLF_D,DRF_F,URB_B); \
  655.   Rot3(DLF_L,DRF_R,URB_R); \
  656.   Rot3(DLF_F,DRF_D,URB_U); \
  657.   Rot3(UR_U,LF_F,DR_D); \
  658.   Rot3(UR_R,LF_L,DR_R); \
  659.   Rot2(RF_R,RB_R); \
  660.   Rot2(RF_F,RB_B); \
  661.   Rot2(DF_D,DB_D); \
  662.   Rot2(DF_F,DB_B); \
  663.   M(L);M(D);M(D);M(l);M(R);M(R);
  664.  
  665. /*      R1;D1;B1;R3;B3; */
  666. #define R1D1B1R3B3 \
  667.   Rot6(DLF_D,DLB_D,DLF_F,DLB_L,DLF_L,DLB_B); \
  668.   Rot9(URF_U,DRB_R,URB_R,URF_R,DRB_B,URB_U,URF_F,DRB_D, \
  669.         URB_B); \
  670.   Rot4(UR_U,RB_R,UR_R,RB_B); \
  671.   Rot6(DL_D,DB_D,DF_F,DL_L,DB_B,DF_D); \
  672.   M(R);M(D);M(B);M(r);M(b);
  673.  
  674. /*      B2;R3;B2; */
  675. #define B2R3B2 \
  676.   Rot4(URF_U,DLB_B,ULB_U,DRF_F); \
  677.   Rot4(URF_R,DLB_L,ULB_L,DRF_R); \
  678.   Rot4(URF_F,DLB_D,ULB_B,DRF_D); \
  679.   Rot4(UR_U,LB_B,DR_D,RF_F); \
  680.   Rot4(UR_R,LB_L,DR_R,RF_R); \
  681.   M(B);M(B);M(r);M(B);M(B);
  682.  
  683. /*      L1;D3;L3;B1;R3;B3; */
  684. #define L1D3L3B1R3B3 \
  685.   Rot12(ULF_U,DRF_R,URF_R,DLF_F,ULF_F,DRF_D,URF_F,DLF_D, \
  686.         ULF_L,DRF_F,URF_U,DLF_L); \
  687.   Rot6(DLB_D,DRB_B,DLB_L,DRB_R,DLB_B,DRB_D); \
  688.   Rot10(UR_U,LF_L,DF_F,DR_R,RF_R,UR_R,LF_F,DF_D,DR_D,RF_F);\
  689.   Rot2(DB_D,DB_B); \
  690.   M(L);M(d);M(l);M(B);M(r);M(b);
  691.  
  692. /*      F3;R1;F1; */
  693. #define F3R1F1 \
  694.   Rot4(DLF_D,DRB_R,URB_R,DRF_D); \
  695.   Rot4(DLF_L,DRB_B,URB_U,DRF_F); \
  696.   Rot4(DLF_F,DRB_D,URB_B,DRF_R); \
  697.   Rot4(UR_U,DF_F,DR_D,RB_B); \
  698.   Rot4(UR_R,DF_D,DR_R,RB_R); \
  699.   M(f);M(R);M(F);
  700.  
  701. /*      D1;B1;R3;B3; */
  702. #define D1B1R3B3 \
  703.   Rot6(DLF_D,DLB_D,DLF_F,DLB_L,DLF_L,DLB_B); \
  704.   Rot6(URF_U,DRF_R,URF_R,DRF_D,URF_F,DRF_F); \
  705.   Rot6(UR_U,DR_R,RF_R,UR_R,DR_D,RF_F); \
  706.   Rot6(DL_D,DB_D,DF_F,DL_L,DB_B,DF_D); \
  707.   M(D);M(B);M(r);M(b);
  708.  
  709. /*      B1;R3;B3; */
  710. #define B1R3B3 \
  711.   Rot4(URF_U,DRB_B,DLB_L,DRF_F); \
  712.   Rot4(URF_R,DRB_D,DLB_D,DRF_R); \
  713.   Rot4(URF_F,DRB_R,DLB_B,DRF_D); \
  714.   Rot4(UR_U,DB_B,DR_D,RF_F); \
  715.   Rot4(UR_R,DB_D,DR_R,RF_R); \
  716.   M(B);M(r);M(b);
  717.  
  718. /*      D3;B1;R3;B3; */
  719. #define D3B1R3B3 \
  720.   Rot5(DLF_D,DRF_D,URF_F,DLB_B,DRB_D); \
  721.   Rot5(DLF_L,DRF_F,URF_U,DLB_L,DRB_R); \
  722.   Rot5(DLF_F,DRF_R,URF_R,DLB_D,DRB_B); \
  723.   Rot10(UR_U,DL_L,DF_F,DR_R,RF_R,UR_R,DL_D,DF_D,DR_D,RF_F);\
  724.   Rot2(DB_D,DB_B); \
  725.   M(d);M(B);M(r);M(b);
  726.  
  727. /*      D1;R2; */
  728. #define D1R2 \
  729.   Rot6(DLF_D,DLB_D,DRB_D,URF_U,DRF_D,URB_U); \
  730.   Rot6(DLF_L,DLB_B,DRB_R,URF_R,DRF_F,URB_B); \
  731.   Rot6(DLF_F,DLB_L,DRB_B,URF_F,DRF_R,URB_R); \
  732.   Rot5(UR_U,DF_D,DL_D,DB_D,DR_D); \
  733.   Rot5(UR_R,DF_F,DL_L,DB_B,DR_R); \
  734.   Rot2(RF_R,RB_R); \
  735.   Rot2(RF_F,RB_B); \
  736.   M(D);M(R);M(R);
  737.  
  738. /*      D3;R2; */
  739. #define D3R2 \
  740.   Rot6(DLF_D,DRF_D,URB_U,DRB_D,URF_U,DLB_D); \
  741.   Rot6(DLF_L,DRF_F,URB_B,DRB_R,URF_R,DLB_B); \
  742.   Rot6(DLF_F,DRF_R,URB_R,DRB_B,URF_F,DLB_L); \
  743.   Rot5(UR_U,DB_D,DL_D,DF_D,DR_D); \
  744.   Rot5(UR_R,DB_B,DL_L,DF_F,DR_R); \
  745.   Rot2(RF_R,RB_R); \
  746.   Rot2(RF_F,RB_B); \
  747.   M(d);M(R);M(R);
  748.  
  749. /*      D2;R2; */
  750. #define D2R2 \
  751.   Rot3(DLF_D,DRB_D,URF_U); \
  752.   Rot3(DLF_L,DRB_R,URF_R); \
  753.   Rot3(DLF_F,DRB_B,URF_F); \
  754.   Rot3(DRF_D,URB_U,DLB_D); \
  755.   Rot3(DRF_R,URB_R,DLB_L); \
  756.   Rot3(DRF_F,URB_B,DLB_B); \
  757.   Rot3(UR_U,DL_D,DR_D); \
  758.   Rot3(UR_R,DL_L,DR_R); \
  759.   Rot2(RF_R,RB_R); \
  760.   Rot2(RF_F,RB_B); \
  761.   Rot2(DF_D,DB_D); \
  762.   Rot2(DF_F,DB_B); \
  763.   M(D);M(D);M(R);M(R);
  764.  
  765. /*      F2;D3;L1;B3;L3; */
  766. #define F2D3L1B3L3 \
  767.   Rot7(ULF_U,DRF_D,DRB_D,URB_R,URF_R,DLF_L,DLB_D); \
  768.   Rot7(ULF_L,DRF_R,DRB_B,URB_B,URF_U,DLF_D,DLB_L); \
  769.   Rot7(ULF_F,DRF_F,DRB_R,URB_U,URF_F,DLF_F,DLB_B); \
  770.   Rot12(UF_U,DF_D,DR_D,DB_D,RB_R,UB_U,UF_F,DF_F,DR_R, \
  771.         DB_B,RB_B,UB_B); \
  772.   Rot2(LF_L,RF_R); \
  773.   Rot2(LF_F,RF_F); \
  774.   Rot2(DL_D,DL_L); \
  775.   M(F);M(F);M(d);M(L);M(b);M(l);
  776.  
  777. /*      R1;B1; */
  778. #define R1B1 \
  779.   Rot15(URF_U,DRF_F,DRB_D,DLB_L,ULB_U,URF_R,DRF_R,DRB_R, \
  780.         DLB_D,ULB_L,URF_F,DRF_D,DRB_B,DLB_B,ULB_B); \
  781.   Rot3(URB_U,URB_R,URB_B); \
  782.   Rot7(UR_U,RF_F,DR_D,RB_B,DB_B,LB_B,UB_B); \
  783.   Rot7(UR_R,RF_R,DR_R,RB_R,DB_D,LB_L,UB_U); \
  784.   M(R);M(B);
  785.  
  786. /*      B2;D1;L1;B3;L3; */
  787. #define B2D1L1B3L3 \
  788.   Rot6(DLF_D,DRF_R,DLF_F,DRF_F,DLF_L,DRF_D); \
  789.   Rot12(ULB_U,DRB_D,DLB_L,URB_R,ULB_L,DRB_R,DLB_D,URB_U, \
  790.         ULB_B,DRB_B,DLB_B,URB_B); \
  791.   Rot2(UB_U,UB_B); \
  792.   Rot3(LB_L,RB_R,DB_D); \
  793.   Rot3(LB_B,RB_B,DB_B); \
  794.   Rot6(DL_D,DR_R,DF_F,DL_L,DR_D,DF_D); \
  795.   M(B);M(B);M(D);M(L);M(b);M(l);
  796.  
  797. /*      L3;B3; */
  798. #define L3B3 \
  799.   Rot15(ULF_U,DLF_F,DLB_D,DRB_R,URB_U,ULF_L,DLF_L,DLB_L, \
  800.         DRB_D,URB_R,ULF_F,DLF_D,DLB_B,DRB_B,URB_B); \
  801.   Rot3(ULB_U,ULB_L,ULB_B); \
  802.   Rot7(UL_U,LF_F,DL_D,LB_B,DB_B,RB_B,UB_B); \
  803.   Rot7(UL_L,LF_L,DL_L,LB_L,DB_D,RB_R,UB_U); \
  804.   M(l);M(b);
  805.  
  806. /*      F2;D2;B2; */
  807. #define F2D2B2 \
  808.   Rot4(ULF_U,DRF_D,DLB_D,URB_U); \
  809.   Rot4(ULF_L,DRF_R,DLB_L,URB_R); \
  810.   Rot4(ULF_F,DRF_F,DLB_B,URB_B); \
  811.   Rot4(DLF_D,DRB_D,ULB_U,URF_U); \
  812.   Rot4(DLF_L,DRB_R,ULB_L,URF_R); \
  813.   Rot4(DLF_F,DRB_B,ULB_B,URF_F); \
  814.   Rot4(UF_U,DF_D,DB_D,UB_U); \
  815.   Rot4(UF_F,DF_F,DB_B,UB_B); \
  816.   Rot2(LF_L,RF_R); \
  817.   Rot2(LF_F,RF_F); \
  818.   Rot2(LB_L,RB_R); \
  819.   Rot2(LB_B,RB_B); \
  820.   Rot2(DL_D,DR_D); \
  821.   Rot2(DL_L,DR_R); \
  822.   M(F);M(F);M(D);M(D);M(B);M(B);
  823.  
  824. /*      R2;D1;B2; */
  825. #define R2D1B2 \
  826.   Rot3(DLF_D,DLB_D,DRF_D); \
  827.   Rot3(DLF_L,DLB_B,DRF_F); \
  828.   Rot3(DLF_F,DLB_L,DRF_R); \
  829.   Rot4(URF_U,DRB_D,ULB_U,URB_U); \
  830.   Rot4(URF_R,DRB_R,ULB_L,URB_B); \
  831.   Rot4(URF_F,DRB_B,ULB_B,URB_R); \
  832.   Rot6(UR_U,DR_D,DF_D,DL_D,DB_D,UB_U); \
  833.   Rot6(UR_R,DR_R,DF_F,DL_L,DB_B,UB_B); \
  834.   Rot3(LB_L,RF_R,RB_R); \
  835.   Rot3(LB_B,RF_F,RB_B); \
  836.   M(R);M(R);M(D);M(B);M(B);
  837.  
  838. /*      L2;D3;B2; */
  839. #define L2D3B2 \
  840.   Rot4(ULF_U,DLB_D,URB_U,ULB_U); \
  841.   Rot4(ULF_L,DLB_L,URB_R,ULB_B); \
  842.   Rot4(ULF_F,DLB_B,URB_B,ULB_L); \
  843.   Rot3(DLF_D,DRF_D,DRB_D); \
  844.   Rot3(DLF_L,DRF_F,DRB_R); \
  845.   Rot3(DLF_F,DRF_R,DRB_B); \
  846.   Rot6(UL_U,DL_D,DF_D,DR_D,DB_D,UB_U); \
  847.   Rot6(UL_L,DL_L,DF_F,DR_R,DB_B,UB_B); \
  848.   Rot3(LF_L,LB_L,RB_R); \
  849.   Rot3(LF_F,LB_B,RB_B); \
  850.   M(L);M(L);M(d);M(B);M(B);
  851.  
  852. /*      F1;D2;F3;B2; */
  853. #define F1D2F3B2 \
  854.   Rot3(URF_U,DLB_L,URB_R); \
  855.   Rot3(URF_R,DLB_D,URB_U); \
  856.   Rot3(URF_F,DLB_B,URB_B); \
  857.   Rot3(DRF_D,DRB_R,ULB_L); \
  858.   Rot3(DRF_R,DRB_D,ULB_U); \
  859.   Rot3(DRF_F,DRB_B,ULB_B); \
  860.   Rot3(UB_U,RF_R,DB_D); \
  861.   Rot3(UB_B,RF_F,DB_B); \
  862.   Rot2(LB_L,RB_R); \
  863.   Rot2(LB_B,RB_B); \
  864.   Rot2(DL_D,DR_D); \
  865.   Rot2(DL_L,DR_R); \
  866.   M(F);M(D);M(D);M(f);M(B);M(B);
  867.  
  868. /*      R1;D1;R3;B2; */
  869. #define R1D1R3B2 \
  870.   Rot12(DLF_D,DLB_D,DRB_R,ULB_L,DLF_F,DLB_L,DRB_D,ULB_U, \
  871.         DLF_L,DLB_B,DRB_B,ULB_B); \
  872.   Rot3(URB_U,URB_B,URB_R); \
  873.   Rot6(UB_U,RB_B,LB_B,DF_D,DL_D,DB_D); \
  874.   Rot6(UB_B,RB_R,LB_L,DF_F,DL_L,DB_B); \
  875.   M(R);M(D);M(r);M(B);M(B);
  876.  
  877. /*      F3;D3;F1;L1;B3;L3; */
  878. #define F3D3F1L1B3L3 \
  879.   Rot5(ULF_U,DLF_F,DLB_B,DRB_D,URB_R); \
  880.   Rot5(ULF_L,DLF_L,DLB_D,DRB_B,URB_B); \
  881.   Rot5(ULF_F,DLF_D,DLB_L,DRB_R,URB_U); \
  882.   Rot10(UB_U,LF_F,DR_R,DB_B,RB_B,UB_B,LF_L,DR_D,DB_D,RB_R); \
  883.   Rot2(DL_D,DL_L); \
  884.   M(f);M(d);M(F);M(L);M(b);M(l);
  885.  
  886. /*      F1;D3;F3;L1;B3;L3; */
  887. #define F1D3F3L1B3L3 \
  888.   Rot6(DLF_D,DLB_L,DLF_F,DLB_B,DLF_L,DLB_D); \
  889.   Rot12(URF_U,DRB_B,URB_B,DRF_R,URF_R,DRB_D,URB_R,DRF_D, \
  890.         URF_F,DRB_R,URB_U,DRF_F); \
  891.   Rot10(UB_U,RF_F,DR_R,DB_B,RB_B,UB_B,RF_R,DR_D,DB_D,RB_R); \
  892.   Rot2(DL_D,DL_L); \
  893.   M(F);M(d);M(f);M(L);M(b);M(l);
  894.  
  895. /*      B1;D1;L1;B3;L3; */
  896. #define B1D1L1B3L3 \
  897.   Rot6(DLF_D,DRF_R,DLF_F,DRF_F,DLF_L,DRF_D); \
  898.   Rot9(ULB_U,URB_R,DLB_D,ULB_L,URB_U,DLB_B,ULB_B,URB_B, \
  899.         DLB_L); \
  900.   Rot4(UB_U,LB_B,UB_B,LB_L); \
  901.   Rot6(DL_D,DR_R,DF_F,DL_L,DR_D,DF_D); \
  902.   M(B);M(D);M(L);M(b);M(l);
  903.  
  904. /*      L2;B3;L2; */
  905. #define L2B3L2 \
  906.   Rot4(ULF_U,DRB_R,URB_U,DLF_L); \
  907.   Rot4(ULF_L,DRB_D,URB_R,DLF_D); \
  908.   Rot4(ULF_F,DRB_B,URB_B,DLF_F); \
  909.   Rot4(UB_U,LF_L,DB_D,RB_R); \
  910.   Rot4(UB_B,LF_F,DB_B,RB_B); \
  911.   M(L);M(L);M(b);M(L);M(L);
  912.  
  913. /*      D3;L1;B3;L3; */
  914. #define D3L1B3L3 \
  915.   Rot5(DLF_D,DLB_L,DRF_R,DRB_B,URB_B); \
  916.   Rot5(DLF_L,DLB_D,DRF_D,DRB_D,URB_R); \
  917.   Rot5(DLF_F,DLB_B,DRF_F,DRB_R,URB_U); \
  918.   Rot10(UB_U,DF_F,DR_R,DB_B,RB_B,UB_B,DF_D,DR_D,DB_D,RB_R);\
  919.   Rot2(DL_D,DL_L); \
  920.   M(d);M(L);M(b);M(l);
  921.  
  922. /*      R3;B1;R1; */
  923. #define R3B1R1 \
  924.   Rot4(DRF_D,DLB_B,ULB_B,DRB_D); \
  925.   Rot4(DRF_R,DLB_D,ULB_L,DRB_B); \
  926.   Rot4(DRF_F,DLB_L,ULB_U,DRB_R); \
  927.   Rot4(UB_U,DR_R,DB_D,LB_L); \
  928.   Rot4(UB_B,DR_D,DB_B,LB_B); \
  929.   M(r);M(B);M(R);
  930.  
  931. /*      D1;L1;B3;L3; */
  932. #define D1L1B3L3 \
  933.   Rot6(DLF_D,DRF_R,DLF_F,DRF_F,DLF_L,DRF_D); \
  934.   Rot6(URB_U,DRB_B,URB_B,DRB_D,URB_R,DRB_R); \
  935.   Rot6(UB_U,DB_B,RB_B,UB_B,DB_D,RB_R); \
  936.   Rot6(DL_D,DR_R,DF_F,DL_L,DR_D,DF_D); \
  937.   M(D);M(L);M(b);M(l);
  938.  
  939. /*      L1;B3;L3; */
  940. #define L1B3L3 \
  941.   Rot4(DLF_D,DRB_B,URB_B,DLB_D); \
  942.   Rot4(DLF_L,DRB_D,URB_R,DLB_B); \
  943.   Rot4(DLF_F,DRB_R,URB_U,DLB_L); \
  944.   Rot4(UB_U,DL_L,DB_D,RB_R); \
  945.   Rot4(UB_B,DL_D,DB_B,RB_B); \
  946.   M(L);M(b);M(l);
  947.  
  948. /*      D2;B2; */
  949. #define D2B2 \
  950.   Rot3(DLF_D,DRB_D,ULB_U); \
  951.   Rot3(DLF_L,DRB_R,ULB_L); \
  952.   Rot3(DLF_F,DRB_B,ULB_B); \
  953.   Rot3(DRF_D,DLB_D,URB_U); \
  954.   Rot3(DRF_R,DLB_L,URB_R); \
  955.   Rot3(DRF_F,DLB_B,URB_B); \
  956.   Rot3(UB_U,DF_D,DB_D); \
  957.   Rot3(UB_B,DF_F,DB_B); \
  958.   Rot2(LB_L,RB_R); \
  959.   Rot2(LB_B,RB_B); \
  960.   Rot2(DL_D,DR_D); \
  961.   Rot2(DL_L,DR_R); \
  962.   M(D);M(D);M(B);M(B);
  963.  
  964. /*      D1;B2; */
  965. #define D1B2 \
  966.   Rot6(DLF_D,DLB_D,URB_U,DRB_D,ULB_U,DRF_D); \
  967.   Rot6(DLF_L,DLB_B,URB_B,DRB_R,ULB_L,DRF_F); \
  968.   Rot6(DLF_F,DLB_L,URB_R,DRB_B,ULB_B,DRF_R); \
  969.   Rot5(UB_U,DR_D,DF_D,DL_D,DB_D); \
  970.   Rot5(UB_B,DR_R,DF_F,DL_L,DB_B); \
  971.   Rot2(LB_L,RB_R); \
  972.   Rot2(LB_B,RB_B); \
  973.   M(D);M(B);M(B);
  974.  
  975. /*      D3;B2; */
  976. #define D3B2 \
  977.   Rot6(DLF_D,DRF_D,DRB_D,ULB_U,DLB_D,URB_U); \
  978.   Rot6(DLF_L,DRF_F,DRB_R,ULB_L,DLB_B,URB_B); \
  979.   Rot6(DLF_F,DRF_R,DRB_B,ULB_B,DLB_L,URB_R); \
  980.   Rot5(UB_U,DL_D,DF_D,DR_D,DB_D); \
  981.   Rot5(UB_B,DL_L,DF_F,DR_R,DB_B); \
  982.   Rot2(LB_L,RB_R); \
  983.   Rot2(LB_B,RB_B); \
  984.   M(d);M(B);M(B);
  985.  
  986. /*      F3;L3; */
  987. #define F3L3 \
  988.   Rot3(ULF_U,ULF_F,ULF_L); \
  989.   Rot15(DLF_D,DLB_B,ULB_U,URF_F,DRF_F,DLF_F,DLB_D,ULB_B, \
  990.         URF_R,DRF_D,DLF_L,DLB_L,ULB_L,URF_U,DRF_R); \
  991.   Rot7(UL_U,UF_F,RF_F,DF_F,LF_F,DL_D,LB_B); \
  992.   Rot7(UL_L,UF_U,RF_R,DF_D,LF_L,DL_L,LB_L); \
  993.   M(f);M(l);
  994.  
  995. /*      R2;D3;F1;L3;F3; */
  996. #define R2D3F1L3F3 \
  997.   Rot7(DLF_D,URF_U,DRB_D,DLB_D,ULB_B,URB_B,DRF_F); \
  998.   Rot7(DLF_L,URF_R,DRB_R,DLB_B,ULB_U,URB_R,DRF_R); \
  999.   Rot7(DLF_F,URF_F,DRB_B,DLB_L,ULB_L,URB_U,DRF_D); \
  1000.   Rot12(UL_U,UR_R,DR_R,DB_B,DL_L,LB_L,UL_L,UR_U,DR_D, \
  1001.         DB_D,DL_D,LB_B); \
  1002.   Rot2(RF_R,RB_R); \
  1003.   Rot2(RF_F,RB_B); \
  1004.   Rot2(DF_D,DF_F); \
  1005.   M(R);M(R);M(d);M(F);M(l);M(f);
  1006.  
  1007. /*      B1;L1; */
  1008. #define B1L1 \
  1009.   Rot15(ULF_U,URB_B,DRB_B,DLB_B,DLF_D,ULF_F,URB_R,DRB_D, \
  1010.         DLB_L,DLF_L,ULF_L,URB_U,DRB_R,DLB_D,DLF_F); \
  1011.   Rot3(ULB_U,ULB_B,ULB_L); \
  1012.   Rot7(UL_U,UB_B,RB_B,DB_B,LB_B,DL_D,LF_F); \
  1013.   Rot7(UL_L,UB_U,RB_R,DB_D,LB_L,DL_L,LF_L); \
  1014.   M(B);M(L);
  1015.  
  1016. /*      L2;D1;F1;L3;F3; */
  1017. #define L2D1F1L3F3 \
  1018.   Rot12(ULF_U,DLB_D,DLF_F,ULB_B,ULF_F,DLB_B,DLF_D,ULB_U, \
  1019.         ULF_L,DLB_L,DLF_L,ULB_L); \
  1020.   Rot6(DRF_D,DRB_B,DRF_R,DRB_R,DRF_F,DRB_D); \
  1021.   Rot2(UL_U,UL_L); \
  1022.   Rot3(LF_L,LB_L,DL_L); \
  1023.   Rot3(LF_F,LB_B,DL_D); \
  1024.   Rot6(DR_D,DF_D,DB_B,DR_R,DF_F,DB_D); \
  1025.   M(L);M(L);M(D);M(F);M(l);M(f);
  1026.  
  1027. /*      F2;D3;L2; */
  1028. #define F2D3L2 \
  1029.   Rot4(ULF_U,URF_U,DLF_D,ULB_U); \
  1030.   Rot4(ULF_L,URF_F,DLF_F,ULB_B); \
  1031.   Rot4(ULF_F,URF_R,DLF_L,ULB_L); \
  1032.   Rot3(DRF_D,DRB_D,DLB_D); \
  1033.   Rot3(DRF_R,DRB_B,DLB_L); \
  1034.   Rot3(DRF_F,DRB_R,DLB_B); \
  1035.   Rot6(UL_U,UF_U,DF_D,DR_D,DB_D,DL_D); \
  1036.   Rot6(UL_L,UF_F,DF_F,DR_R,DB_B,DL_L); \
  1037.   Rot3(LF_L,LB_L,RF_R); \
  1038.   Rot3(LF_F,LB_B,RF_F); \
  1039.   M(F);M(F);M(d);M(L);M(L);
  1040.  
  1041. /*      R2;D2;L2; */
  1042. #define R2D2L2 \
  1043.   Rot4(ULF_U,URB_U,DRF_D,DLB_D); \
  1044.   Rot4(ULF_L,URB_R,DRF_R,DLB_L); \
  1045.   Rot4(ULF_F,URB_B,DRF_F,DLB_B); \
  1046.   Rot4(DLF_D,ULB_U,URF_U,DRB_D); \
  1047.   Rot4(DLF_L,ULB_L,URF_R,DRB_R); \
  1048.   Rot4(DLF_F,ULB_B,URF_F,DRB_B); \
  1049.   Rot4(UL_U,UR_U,DR_D,DL_D); \
  1050.   Rot4(UL_L,UR_R,DR_R,DL_L); \
  1051.   Rot2(LF_L,LB_L); \
  1052.   Rot2(LF_F,LB_B); \
  1053.   Rot2(RF_R,RB_R); \
  1054.   Rot2(RF_F,RB_B); \
  1055.   Rot2(DF_D,DB_D); \
  1056.   Rot2(DF_F,DB_B); \
  1057.   M(R);M(R);M(D);M(D);M(L);M(L);
  1058.  
  1059. /*      B2;D1;L2; */
  1060. #define B2D1L2 \
  1061.   Rot4(ULF_U,ULB_U,URB_U,DLB_D); \
  1062.   Rot4(ULF_L,ULB_B,URB_R,DLB_L); \
  1063.   Rot4(ULF_F,ULB_L,URB_B,DLB_B); \
  1064.   Rot3(DLF_D,DRB_D,DRF_D); \
  1065.   Rot3(DLF_L,DRB_R,DRF_F); \
  1066.   Rot3(DLF_F,DRB_B,DRF_R); \
  1067.   Rot6(UL_U,UB_U,DB_D,DR_D,DF_D,DL_D); \
  1068.   Rot6(UL_L,UB_B,DB_B,DR_R,DF_F,DL_L); \
  1069.   Rot3(LF_L,RB_R,LB_L); \
  1070.   Rot3(LF_F,RB_B,LB_B); \
  1071.   M(B);M(B);M(D);M(L);M(L);
  1072.  
  1073. /*      R3;D3;R1;F1;L3;F3; */
  1074. #define R3D3R1F1L3F3 \
  1075.   Rot5(DLF_D,DLB_L,ULB_L,URF_F,DRF_F); \
  1076.   Rot5(DLF_L,DLB_D,ULB_B,URF_U,DRF_R); \
  1077.   Rot5(DLF_F,DLB_B,ULB_U,URF_R,DRF_D); \
  1078.   Rot10(UL_U,RF_R,DB_B,DL_L,LB_L,UL_L,RF_F,DB_D,DL_D,LB_B);\
  1079.   Rot2(DF_D,DF_F); \
  1080.   M(r);M(d);M(R);M(F);M(l);M(f);
  1081.  
  1082. /*      R1;D2;R3;L2; */
  1083. #define R1D2R3L2 \
  1084.   Rot3(ULF_U,DRB_B,DLB_D); \
  1085.   Rot3(ULF_L,DRB_R,DLB_L); \
  1086.   Rot3(ULF_F,DRB_D,DLB_B); \
  1087.   Rot3(DLF_D,ULB_U,URB_B); \
  1088.   Rot3(DLF_L,ULB_L,URB_R); \
  1089.   Rot3(DLF_F,ULB_B,URB_U); \
  1090.   Rot3(UL_U,RB_B,DL_D); \
  1091.   Rot3(UL_L,RB_R,DL_L); \
  1092.   Rot2(LF_L,LB_L); \
  1093.   Rot2(LF_F,LB_B); \
  1094.   Rot2(DF_D,DB_D); \
  1095.   Rot2(DF_F,DB_B); \
  1096.   M(R);M(D);M(D);M(r);M(L);M(L);
  1097.  
  1098. /*      B1;D1;B3;L2; */
  1099. #define B1D1B3L2 \
  1100.   Rot12(ULF_U,DRF_F,DLF_L,DLB_L,ULF_L,DRF_D,DLF_D, \
  1101.         DLB_B,ULF_F,DRF_R,DLF_F,DLB_D); \
  1102.   Rot3(ULB_U,ULB_L,ULB_B); \
  1103.   Rot6(UL_U,LB_L,LF_L,DR_D,DF_D,DL_D); \
  1104.   Rot6(UL_L,LB_B,LF_F,DR_R,DF_F,DL_L); \
  1105.   M(B);M(D);M(b);M(L);M(L);
  1106.  
  1107. /*      F2;L3;F2; */
  1108. #define F2L3F2 \
  1109.   Rot4(URF_U,DLB_B,ULB_U,DRF_F); \
  1110.   Rot4(URF_R,DLB_L,ULB_L,DRF_R); \
  1111.   Rot4(URF_F,DLB_D,ULB_B,DRF_D); \
  1112.   Rot4(UL_U,RF_F,DL_D,LB_B); \
  1113.   Rot4(UL_L,RF_R,DL_L,LB_L); \
  1114.   M(F);M(F);M(l);M(F);M(F);
  1115.  
  1116. /*      R1;D3;R3;F1;L3;F3; */
  1117. #define R1D3R3F1L3F3 \
  1118.   Rot6(DLF_D,DRF_D,DLF_F,DRF_R,DLF_L,DRF_F); \
  1119.   Rot12(ULB_U,DRB_R,URB_U,DLB_L,ULB_L,DRB_B,URB_B,DLB_D, \
  1120.         ULB_B,DRB_D,URB_R,DLB_B); \
  1121.   Rot10(UL_U,RB_R,DB_B,DL_L,LB_L,UL_L,RB_B,DB_D,DL_D,LB_B);\
  1122.   Rot2(DF_D,DF_F); \
  1123.   M(R);M(d);M(r);M(F);M(l);M(f);
  1124.  
  1125. /*      L1;D1;F1;L3;F3; */
  1126. #define L1D1F1L3F3 \
  1127.   Rot9(ULF_U,ULB_B,DLF_D,ULF_F,ULB_U,DLF_L,ULF_L,ULB_L, \
  1128.         DLF_F); \
  1129.   Rot6(DRF_D,DRB_B,DRF_R,DRB_R,DRF_F,DRB_D); \
  1130.   Rot4(UL_U,LF_L,UL_L,LF_F); \
  1131.   Rot6(DR_D,DF_D,DB_B,DR_R,DF_F,DB_D); \
  1132.   M(L);M(D);M(F);M(l);M(f);
  1133.  
  1134. /*      F1;L3;F3; */
  1135. #define F1L3F3 \
  1136.   Rot4(DLF_D,DRF_D,DLB_L,ULB_L); \
  1137.   Rot4(DLF_L,DRF_F,DLB_D,ULB_B); \
  1138.   Rot4(DLF_F,DRF_R,DLB_B,ULB_U); \
  1139.   Rot4(UL_U,DF_F,DL_D,LB_B); \
  1140.   Rot4(UL_L,DF_D,DL_L,LB_L); \
  1141.   M(F);M(l);M(f);
  1142.  
  1143. /*      D3;F1;L3;F3; */
  1144. #define D3F1L3F3 \
  1145.   Rot5(DLF_D,DRB_D,DLB_D,ULB_B,DRF_F); \
  1146.   Rot5(DLF_L,DRB_R,DLB_B,ULB_U,DRF_R); \
  1147.   Rot5(DLF_F,DRB_B,DLB_L,ULB_L,DRF_D); \
  1148.   Rot10(UL_U,DR_R,DB_B,DL_L,LB_L,UL_L,DR_D,DB_D,DL_D,LB_B);\
  1149.   Rot2(DF_D,DF_F); \
  1150.   M(d);M(F);M(l);M(f);
  1151.  
  1152. /*      B3;L1;B1; */
  1153. #define B3L1B1 \
  1154.   Rot4(ULF_U,DLB_B,DRB_R,DLF_F); \
  1155.   Rot4(ULF_L,DLB_D,DRB_D,DLF_L); \
  1156.   Rot4(ULF_F,DLB_L,DRB_B,DLF_D); \
  1157.   Rot4(UL_U,DB_B,DL_D,LF_F); \
  1158.   Rot4(UL_L,DB_D,DL_L,LF_L); \
  1159.   M(b);M(L);M(B);
  1160.  
  1161. /*      D1;F1;L3;F3; */
  1162. #define D1F1L3F3 \
  1163.   Rot6(DRF_D,DRB_B,DRF_R,DRB_R,DRF_F,DRB_D); \
  1164.   Rot6(ULB_U,DLB_L,ULB_L,DLB_D,ULB_B,DLB_B); \
  1165.   Rot6(UL_U,DL_L,LB_L,UL_L,DL_D,LB_B); \
  1166.   Rot6(DR_D,DF_D,DB_B,DR_R,DF_F,DB_D); \
  1167.   M(D);M(F);M(l);M(f);
  1168.  
  1169. /*      D3;L2; */
  1170. #define D3L2 \
  1171.   Rot6(ULF_U,DLF_D,ULB_U,DRF_D,DRB_D,DLB_D); \
  1172.   Rot6(ULF_L,DLF_F,ULB_B,DRF_R,DRB_B,DLB_L); \
  1173.   Rot6(ULF_F,DLF_L,ULB_L,DRF_F,DRB_R,DLB_B); \
  1174.   Rot5(UL_U,DF_D,DR_D,DB_D,DL_D); \
  1175.   Rot5(UL_L,DF_F,DR_R,DB_B,DL_L); \
  1176.   Rot2(LF_L,LB_L); \
  1177.   Rot2(LF_F,LB_B); \
  1178.   M(d);M(L);M(L);
  1179.  
  1180. /*      D2;L2; */
  1181. #define D2L2 \
  1182.   Rot3(ULF_U,DRF_D,DLB_D); \
  1183.   Rot3(ULF_L,DRF_R,DLB_L); \
  1184.   Rot3(ULF_F,DRF_F,DLB_B); \
  1185.   Rot3(DLF_D,ULB_U,DRB_D); \
  1186.   Rot3(DLF_L,ULB_L,DRB_R); \
  1187.   Rot3(DLF_F,ULB_B,DRB_B); \
  1188.   Rot3(UL_U,DR_D,DL_D); \
  1189.   Rot3(UL_L,DR_R,DL_L); \
  1190.   Rot2(LF_L,LB_L); \
  1191.   Rot2(LF_F,LB_B); \
  1192.   Rot2(DF_D,DB_D); \
  1193.   Rot2(DF_F,DB_B); \
  1194.   M(D);M(D);M(L);M(L);
  1195.  
  1196. /*      D1;L2; */
  1197. #define D1L2 \
  1198.   Rot6(ULF_U,DRB_D,DRF_D,DLF_D,ULB_U,DLB_D); \
  1199.   Rot6(ULF_L,DRB_B,DRF_R,DLF_F,ULB_B,DLB_L); \
  1200.   Rot6(ULF_F,DRB_R,DRF_F,DLF_L,ULB_L,DLB_B); \
  1201.   Rot5(UL_U,DB_D,DR_D,DF_D,DL_D); \
  1202.   Rot5(UL_L,DB_B,DR_R,DF_F,DL_L); \
  1203.   Rot2(LF_L,LB_L); \
  1204.   Rot2(LF_F,LB_B); \
  1205.   M(D);M(L);M(L);
  1206.     
  1207. /* Middle layer transforms */
  1208.  
  1209. /*      D3;F1;D2;L1;D1;L3;D2;F3; */
  1210. #define D3F1D2L1D1L3D2F3 \
  1211.   Rot3(DLF_D,DLB_D,DRF_R); \
  1212.   Rot3(DLF_L,DLB_B,DRF_D); \
  1213.   Rot3(DLF_F,DLB_L,DRF_F); \
  1214.   Rot4(RF_R,DF_D,RF_F,DF_F); \
  1215.   Rot4(DR_D,DB_D,DR_R,DB_B); \
  1216.   M(d);M(F);M(D);M(D);M(L);M(D);M(l);M(D);M(D);M(f);
  1217.  
  1218. /*      F1;D2;L1;D1;L3;D2;F3; */
  1219. #define F1D2L1D1L3D2F3 \
  1220.   Rot4(DLF_D,DRB_D,DRF_D,DLB_B); \
  1221.   Rot4(DLF_L,DRB_R,DRF_F,DLB_L); \
  1222.   Rot4(DLF_F,DRB_B,DRF_R,DLB_D); \
  1223.   Rot4(RF_R,DL_D,DB_D,DF_F); \
  1224.   Rot4(RF_F,DL_L,DB_B,DF_D); \
  1225.   M(F);M(D);M(D);M(L);M(D);M(l);M(D);M(D);M(f);
  1226.  
  1227. /*      R1;D2;F1;D1;F3;D2;R3; */
  1228. #define R1D2F1D1F3D2R3 \
  1229.   Rot4(DLF_D,DRF_R,DLB_L,DRB_B); \
  1230.   Rot4(DLF_L,DRF_D,DLB_D,DRB_D); \
  1231.   Rot4(DLF_F,DRF_F,DLB_B,DRB_R); \
  1232.   Rot4(RB_R,DF_F,DL_L,DR_D); \
  1233.   Rot4(RB_B,DF_D,DL_D,DR_R); \
  1234.   M(R);M(D);M(D);M(F);M(D);M(f);M(D);M(D);M(r);
  1235.  
  1236. /*      D1;R1;D2;F1;D1;F3;D2;R3; */
  1237. #define D1R1D2F1D1F3D2R3 \
  1238.   Rot3(DLF_D,DLF_F,DLF_L); \
  1239.   Rot9(DRF_D,DRB_D,DLB_B,DRF_F,DRB_R,DLB_L,DRF_R,DRB_B, \
  1240.         DLB_D); \
  1241.   Rot5(RB_R,DL_L,DF_D,DB_D,DR_D); \
  1242.   Rot5(RB_B,DL_D,DF_F,DB_B,DR_R); \
  1243.   M(D);M(R);M(D);M(D);M(F);M(D);M(f);M(D);M(D);M(r);
  1244.  
  1245. /*      D1;B1;D2;R1;D1;R3;D2;B3; */
  1246. #define D1B1D2R1D1R3D2B3 \
  1247.   Rot9(DLF_D,DRB_D,DLB_D,DLF_L,DRB_R,DLB_B,DLF_F,DRB_B, \
  1248.         DLB_L); \
  1249.   Rot3(DRF_D,DRF_R,DRF_F); \
  1250.   Rot5(LB_L,DF_D,DR_R,DL_L,DB_B); \
  1251.   Rot5(LB_B,DF_F,DR_D,DL_D,DB_D); \
  1252.   M(D);M(B);M(D);M(D);M(R);M(D);M(r);M(D);M(D);M(b);
  1253.  
  1254. /*      D2;B1;D2;R1;D1;R3;D2;B3; */
  1255. #define D2B1D2R1D1R3D2B3 \
  1256.   Rot6(DLF_D,DRF_D,DLF_F,DRF_R,DLF_L,DRF_F); \
  1257.   Rot3(DLB_D,DLB_B,DLB_L); \
  1258.   Rot8(LB_L,DL_D,DR_D,DB_D,LB_B,DL_L,DR_R,DB_B); \
  1259.   Rot2(DF_D,DF_F); \
  1260.   M(D);M(D);M(B);M(D);M(D);M(R);M(D);M(r);M(D);M(D);M(b);
  1261.  
  1262. /*      D2;L1;D2;B1;D1;B3;D2;L3; */
  1263. #define D2L1D2B1D1B3D2L3 \
  1264.   Rot3(DLF_D,DLF_L,DLF_F); \
  1265.   Rot6(DRF_D,DRB_D,DRF_R,DRB_B,DRF_F,DRB_R); \
  1266.   Rot8(LF_L,DF_F,DB_B,DL_L,LF_F,DF_D,DB_D,DL_D); \
  1267.   Rot2(DR_D,DR_R); \
  1268.   M(D);M(D);M(L);M(D);M(D);M(B);M(D);M(b);M(D);M(D);M(l);
  1269.  
  1270. /*      D3;L1;D2;B1;D1;B3;D2;L3; */
  1271. #define D3L1D2B1D1B3D2L3 \
  1272.   Rot3(DLF_D,DLB_B,DRB_R); \
  1273.   Rot3(DLF_L,DLB_L,DRB_B); \
  1274.   Rot3(DLF_F,DLB_D,DRB_D); \
  1275.   Rot4(LF_L,DL_L,LF_F,DL_D); \
  1276.   Rot4(DR_D,DF_F,DR_R,DF_D); \
  1277.   M(d);M(L);M(D);M(D);M(B);M(D);M(b);M(D);M(D);M(l);
  1278.  
  1279. /*      D2;F1;D2;L1;D1;L3;D2;F3; */
  1280. #define D2F1D2L1D1L3D2F3 \
  1281.   Rot3(DRF_D,DRF_F,DRF_R); \
  1282.   Rot6(DLB_D,DRB_B,DLB_L,DRB_R,DLB_B,DRB_D); \
  1283.   Rot8(RF_R,DR_D,DL_D,DF_D,RF_F,DR_R,DL_L,DF_F); \
  1284.   Rot2(DB_D,DB_B); \
  1285.   M(D);M(D);M(F);M(D);M(D);M(L);M(D);M(l);M(D);M(D);M(f);
  1286.  
  1287. /*      D3;F1;D2;L1;D3;L3;D2;F3; */
  1288. #define D3F1D2L1D3L3D2F3 \
  1289.   Rot3(DLF_D,DLF_L,DLF_F); \
  1290.   Rot9(DRF_D,DLB_D,DRB_B,DRF_R,DLB_L,DRB_R,DRF_F,DLB_B, \
  1291.         DRB_D); \
  1292.   Rot5(RF_R,DR_R,DB_B,DF_F,DL_D); \
  1293.   Rot5(RF_F,DR_D,DB_D,DF_D,DL_L); \
  1294.   M(d);M(F);M(D);M(D);M(L);M(d);M(l);M(D);M(D);M(f);
  1295.  
  1296. /*      D3;R1;D2;F1;D1;F3;D2;R3; */
  1297. #define D3R1D2F1D1F3D2R3 \
  1298.   Rot3(DLF_D,DRB_B,DRF_D); \
  1299.   Rot3(DLF_L,DRB_D,DRF_F); \
  1300.   Rot3(DLF_F,DRB_R,DRF_R); \
  1301.   Rot4(RB_R,DR_R,RB_B,DR_D); \
  1302.   Rot4(DL_D,DB_B,DL_L,DB_D); \
  1303.   M(d);M(R);M(D);M(D);M(F);M(D);M(f);M(D);M(D);M(r);
  1304.  
  1305. /*      R1;D2;F1;D3;F3;D2;R3; */
  1306. #define R1D2F1D3F3D2R3 \
  1307.   Rot4(DLF_D,DRB_B,DLB_L,DRF_R); \
  1308.   Rot4(DLF_L,DRB_D,DLB_D,DRF_D); \
  1309.   Rot4(DLF_F,DRB_R,DLB_B,DRF_F); \
  1310.   Rot4(RB_R,DR_D,DL_L,DF_F); \
  1311.   Rot4(RB_B,DR_R,DL_D,DF_D); \
  1312.   M(R);M(D);M(D);M(F);M(d);M(f);M(D);M(D);M(r);
  1313.  
  1314. /*      B1;D2;R1;D1;R3;D2;B3; */
  1315. #define B1D2R1D1R3D2B3 \
  1316.   Rot4(DLF_D,DLB_D,DRF_F,DRB_D); \
  1317.   Rot4(DLF_L,DLB_B,DRF_R,DRB_R); \
  1318.   Rot4(DLF_F,DLB_L,DRF_D,DRB_B); \
  1319.   Rot4(LB_L,DR_D,DF_D,DB_B); \
  1320.   Rot4(LB_B,DR_R,DF_F,DB_D); \
  1321.   M(B);M(D);M(D);M(R);M(D);M(r);M(D);M(D);M(b);
  1322.  
  1323. /*      D1;B1;D2;R1;D3;R3;D2;B3; */
  1324. #define D1B1D2R1D3R3D2B3 \
  1325.   Rot3(DLF_D,DRF_D,DRB_B); \
  1326.   Rot3(DLF_L,DRF_F,DRB_D); \
  1327.   Rot3(DLF_F,DRF_R,DRB_R); \
  1328.   Rot4(LB_L,DR_R,LB_B,DR_D); \
  1329.   Rot4(DL_D,DB_D,DL_L,DB_B); \
  1330.   M(D);M(B);M(D);M(D);M(R);M(d);M(r);M(D);M(D);M(b);
  1331.  
  1332. /*      D1;L1;D2;B1;D1;B3;D2;L3; */
  1333. #define D1L1D2B1D1B3D2L3 \
  1334.   Rot9(DLF_D,DRF_F,DLB_B,DLF_L,DRF_R,DLB_L,DLF_F,DRF_D, \
  1335.         DLB_D); \
  1336.   Rot3(DRB_D,DRB_B,DRB_R); \
  1337.   Rot5(LF_L,DR_R,DB_D,DF_D,DL_D); \
  1338.   Rot5(LF_F,DR_D,DB_B,DF_F,DL_L); \
  1339.   M(D);M(L);M(D);M(D);M(B);M(D);M(b);M(D);M(D);M(l);
  1340.  
  1341. /*      D2;L1;D2;B1;D3;B3;D2;L3; */
  1342. #define D2L1D2B1D3B3D2L3 \
  1343.   Rot6(DLF_D,DLB_D,DLF_L,DLB_B,DLF_F,DLB_L); \
  1344.   Rot3(DRB_D,DRB_B,DRB_R); \
  1345.   Rot8(LF_L,DR_D,DF_D,DB_D,LF_F,DR_R,DF_F,DB_B); \
  1346.   Rot2(DL_D,DL_L); \
  1347.   M(D);M(D);M(L);M(D);M(D);M(B);M(d);M(b);M(D);M(D);M(l);
  1348.  
  1349. /*      D1;F1;D2;L1;D1;L3;D2;F3; */
  1350. #define D1F1D2L1D1L3D2F3 \
  1351.   Rot9(DLF_D,DRF_D,DRB_R,DLF_L,DRF_F,DRB_B,DLF_F,DRF_R, \
  1352.         DRB_D); \
  1353.   Rot3(DLB_D,DLB_L,DLB_B); \
  1354.   Rot5(RF_R,DB_D,DL_L,DR_R,DF_F); \
  1355.   Rot5(RF_F,DB_B,DL_D,DR_D,DF_D); \
  1356.   M(D);M(F);M(D);M(D);M(L);M(D);M(l);M(D);M(D);M(f);
  1357.  
  1358. /*      D2;F1;D2;L1;D3;L3;D2;F3; */
  1359. #define D2F1D2L1D3L3D2F3 \
  1360.   Rot6(DLF_D,DRF_F,DLF_L,DRF_R,DLF_F,DRF_D); \
  1361.   Rot3(DLB_D,DLB_L,DLB_B); \
  1362.   Rot8(RF_R,DB_B,DR_R,DL_L,RF_F,DB_D,DR_D,DL_D); \
  1363.   Rot2(DF_D,DF_F); \
  1364.   M(D);M(D);M(F);M(D);M(D);M(L);M(d);M(l);M(D);M(D);M(f);
  1365.  
  1366. /*      D2;R1;D2;F1;D1;F3;D2;R3; */
  1367. #define D2R1D2F1D1F3D2R3 \
  1368.   Rot6(DLF_D,DLB_L,DLF_F,DLB_B,DLF_L,DLB_D); \
  1369.   Rot3(DRB_D,DRB_R,DRB_B); \
  1370.   Rot8(RB_R,DB_B,DF_F,DR_R,RB_B,DB_D,DF_D,DR_D); \
  1371.   Rot2(DL_D,DL_L); \
  1372.   M(D);M(D);M(R);M(D);M(D);M(F);M(D);M(f);M(D);M(D);M(r);
  1373.  
  1374. /*      D3;R1;D2;F1;D3;F3;D2;R3; */
  1375. #define D3R1D2F1D3F3D2R3 \
  1376.   Rot9(DLF_D,DLB_L,DRB_B,DLF_F,DLB_B,DRB_R,DLF_L,DLB_D, \
  1377.         DRB_D); \
  1378.   Rot3(DRF_D,DRF_F,DRF_R); \
  1379.   Rot5(RB_R,DB_D,DL_D,DR_D,DF_F); \
  1380.   Rot5(RB_B,DB_B,DL_L,DR_R,DF_D); \
  1381.   M(d);M(R);M(D);M(D);M(F);M(d);M(f);M(D);M(D);M(r);
  1382.  
  1383. /*      D3;B1;D2;R1;D1;R3;D2;B3; */
  1384. #define D3B1D2R1D1R3D2B3 \
  1385.   Rot3(DRF_D,DLB_L,DRB_D); \
  1386.   Rot3(DRF_R,DLB_B,DRB_B); \
  1387.   Rot3(DRF_F,DLB_D,DRB_R); \
  1388.   Rot4(LB_L,DB_D,LB_B,DB_B); \
  1389.   Rot4(DL_D,DF_D,DL_L,DF_F); \
  1390.   M(d);M(B);M(D);M(D);M(R);M(D);M(r);M(D);M(D);M(b);
  1391.  
  1392. /*      B1;D2;R1;D3;R3;D2;B3; */
  1393. #define B1D2R1D3R3D2B3 \
  1394.   Rot4(DLF_D,DRB_D,DRF_F,DLB_D); \
  1395.   Rot4(DLF_L,DRB_R,DRF_R,DLB_B); \
  1396.   Rot4(DLF_F,DRB_B,DRF_D,DLB_L); \
  1397.   Rot4(LB_L,DB_B,DF_D,DR_D); \
  1398.   Rot4(LB_B,DB_D,DF_F,DR_R); \
  1399.   M(B);M(D);M(D);M(R);M(d);M(r);M(D);M(D);M(b);
  1400.  
  1401. /*      L1;D2;B1;D1;B3;D2;L3; */
  1402. #define L1D2B1D1B3D2L3 \
  1403.   Rot4(DLF_D,DRB_R,DLB_D,DRF_D); \
  1404.   Rot4(DLF_L,DRB_B,DLB_B,DRF_F); \
  1405.   Rot4(DLF_F,DRB_D,DLB_L,DRF_R); \
  1406.   Rot4(LF_L,DB_B,DR_R,DL_D); \
  1407.   Rot4(LF_F,DB_D,DR_D,DL_L); \
  1408.   M(L);M(D);M(D);M(B);M(D);M(b);M(D);M(D);M(l);
  1409.  
  1410. /*      D1;L1;D2;B1;D3;B3;D2;L3; */
  1411. #define D1L1D2B1D3B3D2L3 \
  1412.   Rot3(DRF_D,DRB_D,DLB_L); \
  1413.   Rot3(DRF_R,DRB_B,DLB_B); \
  1414.   Rot3(DRF_F,DRB_R,DLB_D); \
  1415.   Rot4(LF_L,DB_D,LF_F,DB_B); \
  1416.   Rot4(DL_D,DF_F,DL_L,DF_D); \
  1417.   M(D);M(L);M(D);M(D);M(B);M(d);M(b);M(D);M(D);M(l);
  1418.  
  1419. /*      F1;D2;L1;D1;L3;D2;F3; */
  1420. #define F1D2L1D1L3D2F3 \
  1421.   Rot4(DLF_D,DRB_D,DRF_D,DLB_B); \
  1422.   Rot4(DLF_L,DRB_R,DRF_F,DLB_L); \
  1423.   Rot4(DLF_F,DRB_B,DRF_R,DLB_D); \
  1424.   Rot4(RF_R,DL_D,DB_D,DF_F); \
  1425.   Rot4(RF_F,DL_L,DB_B,DF_D); \
  1426.   M(F);M(D);M(D);M(L);M(D);M(l);M(D);M(D);M(f);
  1427.  
  1428. /*      D1;F1;D2;L1;D3;L3;D2;F3; */
  1429. #define D1F1D2L1D3L3D2F3 \
  1430.   Rot3(DLF_D,DRB_R,DLB_B); \
  1431.   Rot3(DLF_L,DRB_B,DLB_L); \
  1432.   Rot3(DLF_F,DRB_D,DLB_D); \
  1433.   Rot4(RF_R,DL_L,RF_F,DL_D); \
  1434.   Rot4(DR_D,DF_D,DR_R,DF_F); \
  1435.   M(D);M(F);M(D);M(D);M(L);M(d);M(l);M(D);M(D);M(f);
  1436.  
  1437. /*      D1;R1;D2;F1;D1;F3;D2;R3; */
  1438. #define D1R1D2F1D1F3D2R3 \
  1439.   Rot3(DLF_D,DLF_F,DLF_L); \
  1440.   Rot9(DRF_D,DRB_D,DLB_B,DRF_F,DRB_R,DLB_L,DRF_R,DRB_B, \
  1441.         DLB_D); \
  1442.   Rot5(RB_R,DL_L,DF_D,DB_D,DR_D); \
  1443.   Rot5(RB_B,DL_D,DF_F,DB_B,DR_R); \
  1444.   M(D);M(R);M(D);M(D);M(F);M(D);M(f);M(D);M(D);M(r);
  1445.  
  1446. /*      D2;R1;D2;F1;D3;F3;D2;R3; */
  1447. #define D2R1D2F1D3F3D2R3 \
  1448.   Rot3(DLF_D,DLF_F,DLF_L); \
  1449.   Rot6(DRF_D,DRB_R,DRF_F,DRB_B,DRF_R,DRB_D); \
  1450.   Rot8(RB_R,DL_D,DB_D,DF_D,RB_B,DL_L,DB_B,DF_F); \
  1451.   Rot2(DR_D,DR_R); \
  1452.   M(D);M(D);M(R);M(D);M(D);M(F);M(d);M(f);M(D);M(D);M(r);
  1453.  
  1454. /*      D2;B1;D2;R1;D1;R3;D2;B3; */
  1455. #define D2B1D2R1D1R3D2B3 \
  1456.   Rot6(DLF_D,DRF_D,DLF_F,DRF_R,DLF_L,DRF_F); \
  1457.   Rot3(DLB_D,DLB_B,DLB_L); \
  1458.   Rot8(LB_L,DL_D,DR_D,DB_D,LB_B,DL_L,DR_R,DB_B); \
  1459.   Rot2(DF_D,DF_F); \
  1460.   M(D);M(D);M(B);M(D);M(D);M(R);M(D);M(r);M(D);M(D);M(b);
  1461.  
  1462. /*      D3;B1;D2;R1;D3;R3;D2;B3; */
  1463. #define D3B1D2R1D3R3D2B3 \
  1464.   Rot9(DLF_D,DLB_D,DRF_D,DLF_F,DLB_L,DRF_R,DLF_L,DLB_B, \
  1465.         DRF_F); \
  1466.   Rot3(DRB_D,DRB_R,DRB_B); \
  1467.   Rot5(LB_L,DL_L,DF_F,DB_B,DR_D); \
  1468.   Rot5(LB_B,DL_D,DF_D,DB_D,DR_R); \
  1469.   M(d);M(B);M(D);M(D);M(R);M(d);M(r);M(D);M(D);M(b);
  1470.  
  1471. /*      D3;L1;D2;B1;D1;B3;D2;L3; */
  1472. #define D3L1D2B1D1B3D2L3 \
  1473.   Rot3(DLF_D,DLB_B,DRB_R); \
  1474.   Rot3(DLF_L,DLB_L,DRB_B); \
  1475.   Rot3(DLF_F,DLB_D,DRB_D); \
  1476.   Rot4(LF_L,DL_L,LF_F,DL_D); \
  1477.   Rot4(DR_D,DF_F,DR_R,DF_D); \
  1478.   M(d);M(L);M(D);M(D);M(B);M(D);M(b);M(D);M(D);M(l);
  1479.  
  1480. /*      L1;D2;B1;D3;B3;D2;L3; */
  1481. #define L1D2B1D3B3D2L3 \
  1482.   Rot4(DLF_D,DRF_D,DLB_D,DRB_R); \
  1483.   Rot4(DLF_L,DRF_F,DLB_B,DRB_B); \
  1484.   Rot4(DLF_F,DRF_R,DLB_L,DRB_D); \
  1485.   Rot4(LF_L,DL_D,DR_R,DB_B); \
  1486.   Rot4(LF_F,DL_L,DR_D,DB_D); \
  1487.   M(L);M(D);M(D);M(B);M(d);M(b);M(D);M(D);M(l);
  1488.  
  1489. /*      F1;D2;L1;D1;L3;D2;F3;      */
  1490. #define F1D2L1D1L3D2F3 \
  1491.   Rot4(DLF_D,DRB_D,DRF_D,DLB_B); \
  1492.   Rot4(DLF_L,DRB_R,DRF_F,DLB_L); \
  1493.   Rot4(DLF_F,DRB_B,DRF_R,DLB_D); \
  1494.   Rot4(RF_R,DL_D,DB_D,DF_F); \
  1495.   Rot4(RF_F,DL_L,DB_B,DF_D); \
  1496.   M(F);M(D);M(D);M(L);M(D);M(l);M(D);M(D);M(f);
  1497.  
  1498. /*      R1;D2;F1;D1;F3;D2;R3;  */
  1499. #define R1D2F1D1F3D2R3 \
  1500.   Rot4(DLF_D,DRF_R,DLB_L,DRB_B); \
  1501.   Rot4(DLF_L,DRF_D,DLB_D,DRB_D); \
  1502.   Rot4(DLF_F,DRF_F,DLB_B,DRB_R); \
  1503.   Rot4(RB_R,DF_F,DL_L,DR_D); \
  1504.   Rot4(RB_B,DF_D,DL_D,DR_R); \
  1505.   M(R);M(D);M(D);M(F);M(D);M(f);M(D);M(D);M(r);
  1506.  
  1507. /*      B1;D2;R1;D1;R3;D2;B3;  */
  1508. #define B1D2R1D1R3D2B3 \
  1509.   Rot4(DLF_D,DLB_D,DRF_F,DRB_D); \
  1510.   Rot4(DLF_L,DLB_B,DRF_R,DRB_R); \
  1511.   Rot4(DLF_F,DLB_L,DRF_D,DRB_B); \
  1512.   Rot4(LB_L,DR_D,DF_D,DB_B); \
  1513.   Rot4(LB_B,DR_R,DF_F,DB_D); \
  1514.   M(B);M(D);M(D);M(R);M(D);M(r);M(D);M(D);M(b);
  1515.  
  1516. /*      L1;D2;B1;D1;B3;D2;L3; */
  1517. #define L1D2B1D1B3D2L3 \
  1518.   Rot4(DLF_D,DRB_R,DLB_D,DRF_D); \
  1519.   Rot4(DLF_L,DRB_B,DLB_B,DRF_F); \
  1520.   Rot4(DLF_F,DRB_D,DLB_L,DRF_R); \
  1521.   Rot4(LF_L,DB_B,DR_R,DL_D); \
  1522.   Rot4(LF_F,DB_D,DR_D,DL_L); \
  1523.   M(L);M(D);M(D);M(B);M(D);M(b);M(D);M(D);M(l);
  1524.   
  1525. /* Bottom Layer transforms */
  1526.  
  1527.  
  1528. /*      R1;D3;L3;D1;R3;D3;L1;D2; */
  1529. #define R1D3L3D1R3D3L1D2 \
  1530.   Rot6(DLF_D,DLB_D,DLF_F,DLB_L,DLF_L,DLB_B); \
  1531.   Rot3(DRF_D,DRF_R,DRF_F); \
  1532.   Rot3(DRB_D,DRB_B,DRB_R); \
  1533.   Rot4(DL_D,DB_D,DR_D,DF_D); \
  1534.   Rot4(DL_L,DB_B,DR_R,DF_F); \
  1535.   M(R);M(d);M(l);M(D);M(r);M(d);M(L);M(D);M(D);
  1536.  
  1537. /*      D1;B1;D1;R1;D3;R3;B3; */
  1538. #define D1B1D1R1D3R3B3 \
  1539.   Rot3(DLF_D,DLF_F,DLF_L); \
  1540.   Rot6(DRF_D,DLB_D,DRF_F,DLB_B,DRF_R,DLB_L); \
  1541.   Rot4(DL_D,DB_D,DF_F,DR_D); \
  1542.   Rot4(DL_L,DB_B,DF_D,DR_R); \
  1543.   M(D);M(B);M(D);M(R);M(d);M(r);M(b);
  1544.  
  1545. /*      B1;D3;F3;D1;B3;D3;F1;D2; */
  1546. #define B1D3F3D1B3D3F1D2 \
  1547.   Rot6(DLF_D,DRF_R,DLF_F,DRF_F,DLF_L,DRF_D); \
  1548.   Rot3(DLB_D,DLB_L,DLB_B); \
  1549.   Rot3(DRB_D,DRB_B,DRB_R); \
  1550.   Rot4(DL_D,DB_D,DR_D,DF_D); \
  1551.   Rot4(DL_L,DB_B,DR_R,DF_F); \
  1552.   M(B);M(d);M(f);M(D);M(b);M(d);M(F);M(D);M(D);
  1553.  
  1554. /*      L3;D1;R1;D3;L1;D1;R3;D3; */
  1555. #define L3D1R1D3L1D1R3D3 \
  1556.   Rot3(DLF_D,DLB_B,DRF_R); \
  1557.   Rot3(DLF_L,DLB_L,DRF_D); \
  1558.   Rot3(DLF_F,DLB_D,DRF_F); \
  1559.   M(l);M(D);M(R);M(d);M(L);M(D);M(r);M(d);
  1560.  
  1561. /*      D1;R1;D3;L3;D1;R3;D3;L1; */
  1562. #define D1R1D3L3D1R3D3L1 \
  1563.   Rot3(DLF_D,DRF_R,DLB_B); \
  1564.   Rot3(DLF_L,DRF_D,DLB_L); \
  1565.   Rot3(DLF_F,DRF_F,DLB_D); \
  1566.   M(D);M(R);M(d);M(l);M(D);M(r);M(d);M(L);
  1567.  
  1568. /*      B2;D1;R3;L1;B2;R1;L3;D1;B2; */
  1569. #define B2D1R3L1B2R1L3D1B2 \
  1570.   Rot3(DL_D,DB_D,DR_D); \
  1571.   Rot3(DL_L,DB_B,DR_R); \
  1572.   M(B);M(B);M(D);M(r);M(L);M(B);M(B);M(R);M(l);M(D); \
  1573.   M(B);M(B);
  1574.  
  1575. /*      B2;D3;R3;L1;B2;R1;L3;D3;B2; */
  1576. #define B2D3R3L1B2R1L3D3B2 \
  1577.   Rot3(DL_D,DR_D,DB_D); \
  1578.   Rot3(DL_L,DR_R,DB_B); \
  1579.   M(B);M(B);M(d);M(r);M(L);M(B);M(B);M(R);M(l);M(d); \
  1580.   M(B);M(B);
  1581.  
  1582. /*      R2;D1;F3;B1;R2;F1;B3;D1;R2; */
  1583. #define R2D1F3B1R2F1B3D1R2 \
  1584.   Rot3(DR_D,DF_D,DB_D); \
  1585.   Rot3(DR_R,DF_F,DB_B); \
  1586.   M(R);M(R);M(D);M(f);M(B);M(R);M(R);M(F);M(b);M(D); \
  1587.   M(R);M(R);
  1588.  
  1589. /*      R2;D3;F3;B1;R2;F1;B3;D3;R2; */
  1590. #define R2D3F3B1R2F1B3D3R2 \
  1591.   Rot3(DR_D,DB_D,DF_D); \
  1592.   Rot3(DR_R,DB_B,DF_F); \
  1593.   M(R);M(R);M(d);M(f);M(B);M(R);M(R);M(F);M(b);M(d); \
  1594.   M(R);M(R);
  1595.  
  1596. /*      L2;D1;B3;F1;L2;B1;F3;D1;L2; */
  1597. #define L2D1B3F1L2B1F3D1L2 \
  1598.   Rot3(DL_D,DB_D,DF_D); \
  1599.   Rot3(DL_L,DB_B,DF_F); \
  1600.   M(L);M(L);M(D);M(b);M(F);M(L);M(L);M(B);M(f);M(D); \
  1601.   M(L);M(L);
  1602.  
  1603. /*      L2;D3;B3;F1;L2;B1;F3;D3;L2; */
  1604. #define L2D3B3F1L2B1F3D3L2 \
  1605.   Rot3(DL_D,DF_D,DB_D); \
  1606.   Rot3(DL_L,DF_F,DB_B); \
  1607.   M(L);M(L);M(d);M(b);M(F);M(L);M(L);M(B);M(f);M(d); \
  1608.   M(L);M(L);
  1609.  
  1610. /*      F2;D1;L3;R1;F2;L1;R3;D1;F2; */
  1611. #define F2D1L3R1F2L1R3D1F2 \
  1612.   Rot3(DL_D,DR_D,DF_D); \
  1613.   Rot3(DL_L,DR_R,DF_F); \
  1614.   M(F);M(F);M(D);M(l);M(R);M(F);M(F);M(L);M(r);M(D); \
  1615.   M(F);M(F);
  1616.  
  1617. /*      F2;D3;L3;R1;F2;L1;R3;D3;F2; */
  1618. #define F2D3L3R1F2L1R3D3F2 \
  1619.   Rot3(DL_D,DF_D,DR_D); \
  1620.   Rot3(DL_L,DF_F,DR_R); \
  1621.   M(F);M(F);M(d);M(l);M(R);M(F);M(F);M(L);M(r);M(d); \
  1622.   M(F);M(F);
  1623.  
  1624. /*      F1;L1;D1;L3;D3;F2;R3;D3;R1;D1;F1; */
  1625. #define F1L1D1L3D3F2R3D3R1D1F1 \
  1626.   Rot2(DL_D,DF_F); \
  1627.   Rot2(DL_L,DF_D); \
  1628.   Rot2(DR_D,DB_D); \
  1629.   Rot2(DR_R,DB_B); \
  1630.   M(F);M(L);M(D);M(l);M(d);M(F);M(F);M(r);M(d);M(R); \
  1631.   M(D);M(F);
  1632.  
  1633. /*      R2;L2;U1;R2;L2;D2;R2;L2;U1;R2;L2; */
  1634. #define R2L2U1R2L2D2R2L2U1R2L2 \
  1635.   Rot2(DL_D,DR_D); \
  1636.   Rot2(DL_L,DR_R); \
  1637.   Rot2(DF_D,DB_D); \
  1638.   Rot2(DF_F,DB_B); \
  1639.   M(R);M(R);M(L);M(L);M(U);M(R);M(R);M(L);M(L);M(D); \
  1640.   M(D);M(R);M(R);M(L);M(L);M(U);M(R);M(R);M(L);M(L);
  1641.  
  1642. /*      R1;F1;D1;F3;D3;R2;B3;D3;B1;D1;R1; */
  1643. #define R1F1D1F3D3R2B3D3B1D1R1 \
  1644.   Rot2(DL_D,DB_D); \
  1645.   Rot2(DL_L,DB_B); \
  1646.   Rot2(DR_D,DF_F); \
  1647.   Rot2(DR_R,DF_D); \
  1648.   M(R);M(F);M(D);M(f);M(d);M(R);M(R);M(b);M(d);M(B); \
  1649.   M(D);M(R);
  1650.   
  1651. /* Corner Twist transforms */  
  1652.  
  1653.  
  1654. /*      L3;U1;L1;F1;U1;F3; */
  1655. #define L3U1L1F1U1F3 \
  1656.   Rot3(ULF_U,ULF_L,ULF_F); \
  1657.   Rot3(DLF_D,DLF_F,DLF_L); \
  1658.   Rot9(URF_U,URB_U,ULB_U,URF_F,URB_R,ULB_B,URF_R,URB_B, \
  1659.        ULB_L); \
  1660.   Rot5(UL_U,UF_F,UR_R,LF_L,UB_U); \
  1661.   Rot5(UL_L,UF_U,UR_U,LF_F,UB_B); \
  1662.   M(l);M(U);M(L);M(F);M(U);M(f);
  1663.  
  1664. /*      D1;F1;U3;F3;L3;U3;L1;D3; */
  1665. #define D1F1U3F3L3U3L1D3 \
  1666.   Rot3(ULF_U,ULF_F,ULF_L); \
  1667.   Rot9(URF_U,ULB_L,URB_B,URF_R,ULB_B,URB_R,URF_F,ULB_U, \
  1668.        URB_U); \
  1669.   Rot3(DLB_D,DLB_B,DLB_L); \
  1670.   Rot5(UL_U,UB_U,LF_L,UR_R,UF_F); \
  1671.   Rot5(UL_L,UB_B,LF_F,UR_U,UF_U); \
  1672.   M(D);M(F);M(u);M(f);M(l);M(u);M(L);M(d);
  1673.  
  1674. /*      D2;F1;U3;F3;L3;U3;L1;D2; */
  1675. #define D2F1U3F3L3U3L1D2 \
  1676.   Rot3(ULF_U,ULF_F,ULF_L); \
  1677.   Rot9(URF_U,ULB_L,URB_B,URF_R,ULB_B,URB_R,URF_F,ULB_U, \
  1678.        URB_U); \
  1679.   Rot3(DRB_D,DRB_R,DRB_B); \
  1680.   Rot5(UL_U,UB_U,LF_L,UR_R,UF_F); \
  1681.   Rot5(UL_L,UB_B,LF_F,UR_U,UF_U); \
  1682.   M(D);M(D);M(F);M(u);M(f);M(l);M(u);M(L);M(D);M(D);
  1683.  
  1684. /*      D3;F1;U3;F3;L3;U3;L1;D1; */
  1685. #define D3F1U3F3L3U3L1D1 \
  1686.   Rot3(ULF_U,ULF_F,ULF_L); \
  1687.   Rot9(URF_U,ULB_L,URB_B,URF_R,ULB_B,URB_R,URF_F,ULB_U, \
  1688.        URB_U); \
  1689.   Rot3(DRF_D,DRF_F,DRF_R); \
  1690.   Rot5(UL_U,UB_U,LF_L,UR_R,UF_F); \
  1691.   Rot5(UL_L,UB_B,LF_F,UR_U,UF_U); \
  1692.   M(d);M(F);M(u);M(f);M(l);M(u);M(L);M(D);
  1693.  
  1694. /*      D1;F1;U3;F3;L3;U3;L1;D3; */
  1695. #define D1F1U3F3L3U3L1D3 \
  1696.   Rot3(ULF_U,ULF_F,ULF_L); \
  1697.   Rot9(URF_U,ULB_L,URB_B,URF_R,ULB_B,URB_R,URF_F,ULB_U, \
  1698.        URB_U); \
  1699.   Rot3(DLB_D,DLB_B,DLB_L); \
  1700.   Rot5(UL_U,UB_U,LF_L,UR_R,UF_F); \
  1701.   Rot5(UL_L,UB_B,LF_F,UR_U,UF_U); \
  1702.   M(D);M(F);M(u);M(f);M(l);M(u);M(L);M(d);
  1703.  
  1704. /*      D3;F1;U3;F3;L3;U3;L1;D1; */
  1705. #define D3F1U3F3L3U3L1D1 \
  1706.   Rot3(ULF_U,ULF_F,ULF_L); \
  1707.   Rot9(URF_U,ULB_L,URB_B,URF_R,ULB_B,URB_R,URF_F,ULB_U, \
  1708.        URB_U); \
  1709.   Rot3(DRF_D,DRF_F,DRF_R); \
  1710.   Rot5(UL_U,UB_U,LF_L,UR_R,UF_F); \
  1711.   Rot5(UL_L,UB_B,LF_F,UR_U,UF_U); \
  1712.   M(d);M(F);M(u);M(f);M(l);M(u);M(L);M(D);
  1713.  
  1714. /*      F3;U1;F1;R1;U1;R3; */
  1715. #define F3U1F1R1U1R3 \
  1716.   Rot9(ULF_U,URB_R,ULB_B,ULF_L,URB_B,ULB_L,ULF_F,URB_U, \
  1717.        ULB_U); \
  1718.   Rot3(URF_U,URF_F,URF_R); \
  1719.   Rot3(DRF_D,DRF_R,DRF_F); \
  1720.   Rot5(UL_U,UF_U,UR_R,UB_B,RF_F); \
  1721.   Rot5(UL_L,UF_F,UR_U,UB_U,RF_R); \
  1722.   M(f);M(U);M(F);M(R);M(U);M(r);
  1723.  
  1724. /*      D1;R1;U3;R3;F3;U3;F1;D3; */
  1725. #define D1R1U3R3F3U3F1D3 \
  1726.   Rot9(ULF_U,ULB_U,URB_U,ULF_F,ULB_L,URB_B,ULF_L,ULB_B, \
  1727.        URB_R); \
  1728.   Rot3(DLF_D,DLF_L,DLF_F); \
  1729.   Rot3(URF_U,URF_R,URF_F); \
  1730.   Rot5(UL_U,RF_F,UB_B,UR_R,UF_U); \
  1731.   Rot5(UL_L,RF_R,UB_U,UR_U,UF_F); \
  1732.   M(D);M(R);M(u);M(r);M(f);M(u);M(F);M(d);
  1733.  
  1734. /*      D2;R1;U3;R3;F3;U3;F1;D2; */
  1735. #define D2R1U3R3F3U3F1D2 \
  1736.   Rot9(ULF_U,ULB_U,URB_U,ULF_F,ULB_L,URB_B,ULF_L,ULB_B, \
  1737.        URB_R); \
  1738.   Rot3(URF_U,URF_R,URF_F); \
  1739.   Rot3(DLB_D,DLB_B,DLB_L); \
  1740.   Rot5(UL_U,RF_F,UB_B,UR_R,UF_U); \
  1741.   Rot5(UL_L,RF_R,UB_U,UR_U,UF_F); \
  1742.   M(D);M(D);M(R);M(u);M(r);M(f);M(u);M(F);M(D);M(D);
  1743.  
  1744. /*      D3;R1;U3;R3;F3;U3;F1;D1; */
  1745. #define D3R1U3R3F3U3F1D1 \
  1746.   Rot9(ULF_U,ULB_U,URB_U,ULF_F,ULB_L,URB_B,ULF_L,ULB_B, \
  1747.        URB_R); \
  1748.   Rot3(URF_U,URF_R,URF_F); \
  1749.   Rot3(DRB_D,DRB_R,DRB_B); \
  1750.   Rot5(UL_U,RF_F,UB_B,UR_R,UF_U); \
  1751.   Rot5(UL_L,RF_R,UB_U,UR_U,UF_F); \
  1752.   M(d);M(R);M(u);M(r);M(f);M(u);M(F);M(D);
  1753.  
  1754. /*      D1;R1;U3;R3;F3;U3;F1;D3; */
  1755. #define D1R1U3R3F3U3F1D3 \
  1756.   Rot9(ULF_U,ULB_U,URB_U,ULF_F,ULB_L,URB_B,ULF_L,ULB_B, \
  1757.        URB_R); \
  1758.   Rot3(DLF_D,DLF_L,DLF_F); \
  1759.   Rot3(URF_U,URF_R,URF_F); \
  1760.   Rot5(UL_U,RF_F,UB_B,UR_R,UF_U); \
  1761.   Rot5(UL_L,RF_R,UB_U,UR_U,UF_F); \
  1762.   M(D);M(R);M(u);M(r);M(f);M(u);M(F);M(d);
  1763.  
  1764. /*      D3;R1;U3;R3;F3;U3;F1;D1; */
  1765. #define D3R1U3R3F3U3F1D1 \
  1766.   Rot9(ULF_U,ULB_U,URB_U,ULF_F,ULB_L,URB_B,ULF_L,ULB_B, \
  1767.        URB_R); \
  1768.   Rot3(URF_U,URF_R,URF_F); \
  1769.   Rot3(DRB_D,DRB_R,DRB_B); \
  1770.   Rot5(UL_U,RF_F,UB_B,UR_R,UF_U); \
  1771.   Rot5(UL_L,RF_R,UB_U,UR_U,UF_F); \
  1772.   M(d);M(R);M(u);M(r);M(f);M(u);M(F);M(D);
  1773.  
  1774. /*      R3;U1;R1;B1;U1;B3; */
  1775. #define R3U1R1B1U1B3 \
  1776.   Rot9(ULF_U,URF_U,ULB_B,ULF_L,URF_F,ULB_L,ULF_F,URF_R, \
  1777.        ULB_U); \
  1778.   Rot3(URB_U,URB_R,URB_B); \
  1779.   Rot3(DRB_D,DRB_B,DRB_R); \
  1780.   Rot5(UL_U,RB_B,UF_F,UR_R,UB_U); \
  1781.   Rot5(UL_L,RB_R,UF_U,UR_U,UB_B); \
  1782.   M(r);M(U);M(R);M(B);M(U);M(b);
  1783.  
  1784. /*      D1;B1;U3;B3;R3;U3;R1;D3; */
  1785. #define D1B1U3B3R3U3R1D3 \
  1786.   Rot9(ULF_U,ULB_U,URF_R,ULF_F,ULB_L,URF_F,ULF_L,ULB_B, \
  1787.        URF_U); \
  1788.   Rot3(DRF_D,DRF_F,DRF_R); \
  1789.   Rot3(URB_U,URB_B,URB_R); \
  1790.   Rot5(UL_U,UB_U,UR_R,UF_F,RB_B); \
  1791.   Rot5(UL_L,UB_B,UR_U,UF_U,RB_R); \
  1792.   M(D);M(B);M(u);M(b);M(r);M(u);M(R);M(d);
  1793.  
  1794. /*      D2;B1;U3;B3;R3;U3;R1;D2; */
  1795. #define D2B1U3B3R3U3R1D2 \
  1796.   Rot9(ULF_U,ULB_U,URF_R,ULF_F,ULB_L,URF_F,ULF_L,ULB_B, \
  1797.        URF_U); \
  1798.   Rot3(DLF_D,DLF_L,DLF_F); \
  1799.   Rot3(URB_U,URB_B,URB_R); \
  1800.   Rot5(UL_U,UB_U,UR_R,UF_F,RB_B); \
  1801.   Rot5(UL_L,UB_B,UR_U,UF_U,RB_R); \
  1802.   M(D);M(D);M(B);M(u);M(b);M(r);M(u);M(R);M(D);M(D);
  1803.  
  1804. /*      D3;B1;U3;B3;R3;U3;R1;D1; */
  1805. #define D3B1U3B3R3U3R1D1 \
  1806.   Rot9(ULF_U,ULB_U,URF_R,ULF_F,ULB_L,URF_F,ULF_L,ULB_B, \
  1807.        URF_U); \
  1808.   Rot3(DLB_D,DLB_B,DLB_L); \
  1809.   Rot3(URB_U,URB_B,URB_R); \
  1810.   Rot5(UL_U,UB_U,UR_R,UF_F,RB_B); \
  1811.   Rot5(UL_L,UB_B,UR_U,UF_U,RB_R); \
  1812.   M(d);M(B);M(u);M(b);M(r);M(u);M(R);M(D);
  1813.  
  1814. /*      D1;B1;U3;B3;R3;U3;R1;D3; */
  1815. #define D1B1U3B3R3U3R1D3 \
  1816.   Rot9(ULF_U,ULB_U,URF_R,ULF_F,ULB_L,URF_F,ULF_L,ULB_B, \
  1817.        URF_U); \
  1818.   Rot3(DRF_D,DRF_F,DRF_R); \
  1819.   Rot3(URB_U,URB_B,URB_R); \
  1820.   Rot5(UL_U,UB_U,UR_R,UF_F,RB_B); \
  1821.   Rot5(UL_L,UB_B,UR_U,UF_U,RB_R); \
  1822.   M(D);M(B);M(u);M(b);M(r);M(u);M(R);M(d);
  1823.  
  1824. /*      D3;B1;U3;B3;R3;U3;R1;D1; */
  1825. #define D3B1U3B3R3U3R1D1 \
  1826.   Rot9(ULF_U,ULB_U,URF_R,ULF_F,ULB_L,URF_F,ULF_L,ULB_B, \
  1827.        URF_U); \
  1828.   Rot3(DLB_D,DLB_B,DLB_L); \
  1829.   Rot3(URB_U,URB_B,URB_R); \
  1830.   Rot5(UL_U,UB_U,UR_R,UF_F,RB_B); \
  1831.   Rot5(UL_L,UB_B,UR_U,UF_U,RB_R); \
  1832.   M(d);M(B);M(u);M(b);M(r);M(u);M(R);M(D);
  1833.  
  1834. /*      B3;U1;B1;L1;U1;L3; */
  1835. #define B3U1B1L1U1L3 \
  1836.   Rot9(ULF_U,URF_U,URB_U,ULF_L,URF_F,URB_R,ULF_F,URF_R, \
  1837.        URB_B); \
  1838.   Rot3(ULB_U,ULB_B,ULB_L); \
  1839.   Rot3(DLB_D,DLB_L,DLB_B); \
  1840.   Rot5(UL_U,UF_U,LB_L,UR_R,UB_B); \
  1841.   Rot5(UL_L,UF_F,LB_B,UR_U,UB_U); \
  1842.   M(b);M(U);M(B);M(L);M(U);M(l);
  1843.  
  1844. /*      D1;L1;U3;L3;B3;U3;B1;D3; */
  1845. #define D1L1U3L3B3U3B1D3 \
  1846.   Rot9(ULF_U,URB_B,URF_R,ULF_F,URB_R,URF_F,ULF_L,URB_U, \
  1847.        URF_U); \
  1848.   Rot3(ULB_U,ULB_L,ULB_B); \
  1849.   Rot3(DRB_D,DRB_R,DRB_B); \
  1850.   Rot5(UL_U,UB_B,UR_R,LB_L,UF_U); \
  1851.   Rot5(UL_L,UB_U,UR_U,LB_B,UF_F); \
  1852.   M(D);M(L);M(u);M(l);M(b);M(u);M(B);M(d);
  1853.  
  1854.  
  1855. /*      D2;L1;U3;L3;B3;U3;B1;D2; */
  1856. #define D2L1U3L3B3U3B1D2 \
  1857.   Rot9(ULF_U,URB_B,URF_R,ULF_F,URB_R,URF_F,ULF_L,URB_U, \
  1858.        URF_U); \
  1859.   Rot3(DRF_D,DRF_F,DRF_R); \
  1860.   Rot3(ULB_U,ULB_L,ULB_B); \
  1861.   Rot5(UL_U,UB_B,UR_R,LB_L,UF_U); \
  1862.   Rot5(UL_L,UB_U,UR_U,LB_B,UF_F); \
  1863.   M(D);M(D);M(L);M(u);M(l);M(b);M(u);M(B);M(D);M(D);
  1864.  
  1865. /*      D3;L1;U3;L3;B3;U3;B1;D1; */
  1866. #define D3L1U3L3B3U3B1D1 \
  1867.   Rot9(ULF_U,URB_B,URF_R,ULF_F,URB_R,URF_F,ULF_L,URB_U, \
  1868.        URF_U); \
  1869.   Rot3(DLF_D,DLF_L,DLF_F); \
  1870.   Rot3(ULB_U,ULB_L,ULB_B); \
  1871.   Rot5(UL_U,UB_B,UR_R,LB_L,UF_U); \
  1872.   Rot5(UL_L,UB_U,UR_U,LB_B,UF_F); \
  1873.   M(d);M(L);M(u);M(l);M(b);M(u);M(B);M(D);
  1874.  
  1875. /*      D1;L1;U3;L3;B3;U3;B1;D3; */
  1876. #define D1L1U3L3B3U3B1D3 \
  1877.   Rot9(ULF_U,URB_B,URF_R,ULF_F,URB_R,URF_F,ULF_L,URB_U, \
  1878.        URF_U); \
  1879.   Rot3(ULB_U,ULB_L,ULB_B); \
  1880.   Rot3(DRB_D,DRB_R,DRB_B); \
  1881.   Rot5(UL_U,UB_B,UR_R,LB_L,UF_U); \
  1882.   Rot5(UL_L,UB_U,UR_U,LB_B,UF_F); \
  1883.   M(D);M(L);M(u);M(l);M(b);M(u);M(B);M(d);
  1884.  
  1885. /*      D3;L1;U3;L3;B3;U3;B1;D1; */
  1886. #define D3L1U3L3B3U3B1D1 \
  1887.   Rot9(ULF_U,URB_B,URF_R,ULF_F,URB_R,URF_F,ULF_L,URB_U, \
  1888.        URF_U); \
  1889.   Rot3(DLF_D,DLF_L,DLF_F); \
  1890.   Rot3(ULB_U,ULB_L,ULB_B); \
  1891.   Rot5(UL_U,UB_B,UR_R,LB_L,UF_U); \
  1892.   Rot5(UL_L,UB_U,UR_U,LB_B,UF_F); \
  1893.   M(d);M(L);M(u);M(l);M(b);M(u);M(B);M(D);
  1894.  
  1895. /*      L3;U1;L1;F1;U1;F3;D1;F1;U3;F3;L3;U3;L1;D3; */
  1896. #define L3U1L1F1U1F3D1F1U3F3L3U3L1D3 \
  1897.   Rot3(DLF_D,DLF_F,DLF_L); \
  1898.   Rot3(DLB_D,DLB_B,DLB_L); \
  1899.   M(l);M(U);M(L);M(F);M(U);M(f);M(D);M(F);M(u);M(f); \
  1900.   M(l);M(u);M(L);M(d);
  1901.  
  1902. /*      F3;U1;F1;R1;U1;R3;D1;R1;U3;R3;F3;U3;F1;D3; */
  1903. #define F3U1F1R1U1R3D1R1U3R3F3U3F1D3 \
  1904.   Rot3(DLF_D,DLF_L,DLF_F); \
  1905.   Rot3(DRF_D,DRF_R,DRF_F); \
  1906.   M(f);M(U);M(F);M(R);M(U);M(r);M(D);M(R);M(u);M(r); \
  1907.   M(f);M(u);M(F);M(d);  
  1908.   
  1909. /* Edge exchanges */
  1910.  
  1911.  
  1912. /*      F1;D1;U3;R2;D2;U2;L1;D1;L3;U2;D2;R2;U1;D3;F3;D3; */
  1913. #define F1D1U3R2D2U2L1D1L3U2D2R2U1D3F3D3 \
  1914.   Rot2(DL_D,DL_L); \
  1915.   Rot2(DF_D,DF_F); \
  1916.   M(F);M(D);M(u);M(R);M(R);M(D);M(D);M(U);M(U);M(L); \
  1917.   M(D);M(l);M(U);M(U);M(D);M(D);M(R);M(R);M(U);M(d); \
  1918.   M(f);M(d);
  1919.  
  1920. /*      F1;D1;U3;R2;D2;U2;L1;D2;L3;U2;D2;R2;U1;D3;F3;D2; */
  1921. #define F1D1U3R2D2U2L1D2L3U2D2R2U1D3F3D2 \
  1922.   Rot2(DF_D,DF_F); \
  1923.   Rot2(DB_D,DB_B); \
  1924.   M(F);M(D);M(u);M(R);M(R);M(D);M(D);M(U);M(U);M(L); \
  1925.   M(D);M(D);M(l);M(U);M(U);M(D);M(D);M(R);M(R);M(U); \
  1926.   M(d);M(f);M(D);M(D);
  1927.  
  1928. /*      F1;D1;U3;R2;D2;U2;L1;D3;L3;U2;D2;R2;U1;D3;F3;D1; */
  1929. #define F1D1U3R2D2U2L1D3L3U2D2R2U1D3F3D1 \
  1930.   Rot2(DR_D,DR_R); \
  1931.   Rot2(DF_D,DF_F); \
  1932.   M(F);M(D);M(u);M(R);M(R);M(D);M(D);M(U);M(U);M(L); \
  1933.   M(d);M(l);M(U);M(U);M(D);M(D);M(R);M(R);M(U);M(d); \
  1934.   M(f);M(D);
  1935.  
  1936. /*      R1;D1;U3;B2;D2;U2;F1;D1;F3;U2;D2;B2;U1;D3;R3;D3; */
  1937. #define R1D1U3B2D2U2F1D1F3U2D2B2U1D3R3D3 \
  1938.   Rot2(DR_D,DR_R); \
  1939.   Rot2(DF_D,DF_F); \
  1940.   M(R);M(D);M(u);M(B);M(B);M(D);M(D);M(U);M(U);M(F); \
  1941.   M(D);M(f);M(U);M(U);M(D);M(D);M(B);M(B);M(U);M(d); \
  1942.   M(r);M(d);
  1943.  
  1944. /*      R1;D1;U3;B2;D2;U2;F1;D2;F3;U2;D2;B2;U1;D3;R3;D2; */
  1945. #define R1D1U3B2D2U2F1D2F3U2D2B2U1D3R3D2 \
  1946.   Rot2(DL_D,DL_L); \
  1947.   Rot2(DR_D,DR_R); \
  1948.   M(R);M(D);M(u);M(B);M(B);M(D);M(D);M(U);M(U);M(F); \
  1949.   M(D);M(D);M(f);M(U);M(U);M(D);M(D);M(B);M(B);M(U); \
  1950.   M(d);M(r);M(D);M(D);
  1951.  
  1952. /*      R1;D1;U3;B2;D2;U2;F1;D3;F3;U2;D2;B2;U1;D3;R3;D1; */
  1953. #define R1D1U3B2D2U2F1D3F3U2D2B2U1D3R3D1 \
  1954.   Rot2(DR_D,DR_R); \
  1955.   Rot2(DB_D,DB_B); \
  1956.   M(R);M(D);M(u);M(B);M(B);M(D);M(D);M(U);M(U);M(F); \
  1957.   M(d);M(f);M(U);M(U);M(D);M(D);M(B);M(B);M(U);M(d); \
  1958.   M(r);M(D);
  1959.   
  1960. /*      B1;D1;U3;L2;D2;U2;R1;D1;R3;U2;D2;L2;U1;D3;B3;D3; */
  1961. #define B1D1U3L2D2U2R1D1R3U2D2L2U1D3B3D3 \
  1962.   Rot2(DR_D,DR_R); \
  1963.   Rot2(DB_D,DB_B); \
  1964.   M(B);M(D);M(u);M(L);M(L);M(D);M(D);M(U);M(U);M(R); \
  1965.   M(D);M(r);M(U);M(U);M(D);M(D);M(L);M(L);M(U);M(d); \
  1966.   M(b);M(d);
  1967.  
  1968. /*      B1;D1;U3;L2;D2;U2;R1;D2;R3;U2;D2;L2;U1;D3;B3;D2; */
  1969. #define B1D1U3L2D2U2R1D2R3U2D2L2U1D3B3D2 \
  1970.   Rot2(DF_D,DF_F); \
  1971.   Rot2(DB_D,DB_B); \
  1972.   M(B);M(D);M(u);M(L);M(L);M(D);M(D);M(U);M(U);M(R); \
  1973.   M(D);M(D);M(r);M(U);M(U);M(D);M(D);M(L);M(L);M(U); \
  1974.   M(d);M(b);M(D);M(D);
  1975.  
  1976. /*      B1;D1;U3;L2;D2;U2;R1;D3;R3;U2;D2;L2;U1;D3;B3;D1 */
  1977. #define B1D1U3L2D2U2R1D3R3U2D2L2U1D3B3D1 \
  1978.   Rot2(DL_D,DL_L); \
  1979.   Rot2(DB_D,DB_B); \
  1980.   M(B);M(D);M(u);M(L);M(L);M(D);M(D);M(U);M(U);M(R); \
  1981.   M(d);M(r);M(U);M(U);M(D);M(D);M(L);M(L);M(U);M(d); \
  1982.   M(b);M(D);
  1983.   
  1984. /*      L1;D1;U3;F2;D2;U2;B1;D1;B3;U2;D2;F2;U1;D3;L3;D3; */
  1985. #define L1D1U3F2D2U2B1D1B3U2D2F2U1D3L3D3 \
  1986.   Rot2(DL_D,DL_L); \
  1987.   Rot2(DB_D,DB_B); \
  1988.   M(L);M(D);M(u);M(F);M(F);M(D);M(D);M(U);M(U);M(B); \
  1989.   M(D);M(b);M(U);M(U);M(D);M(D);M(F);M(F);M(U);M(d); \
  1990.   M(l);M(d);
  1991.  
  1992. /*      L1;D1;U3;F2;D2;U2;B1;D2;B3;U2;D2;F2;U1;D3;L3;D2; */
  1993. #define L1D1U3F2D2U2B1D2B3U2D2F2U1D3L3D2 \
  1994.   Rot2(DL_D,DL_L); \
  1995.   Rot2(DR_D,DR_R); \
  1996.   M(L);M(D);M(u);M(F);M(F);M(D);M(D);M(U);M(U);M(B); \
  1997.   M(D);M(D);M(b);M(U);M(U);M(D);M(D);M(F);M(F);M(U); \
  1998.   M(d);M(l);M(D);M(D);
  1999.  
  2000. /*      L1;D1;U3;F2;D2;U2;B1;D3;B3;U2;D2;F2;U1;D3;L3;D1; */
  2001. #define L1D1U3F2D2U2B1D3B3U2D2F2U1D3L3D1 \
  2002.   Rot2(DL_D,DL_L); \
  2003.   Rot2(DF_D,DF_F); \
  2004.   M(L);M(D);M(u);M(F);M(F);M(D);M(D);M(U);M(U);M(B); \
  2005.   M(d);M(b);M(U);M(U);M(D);M(D);M(F);M(F);M(U);M(d); \
  2006.   M(l);M(D);
  2007.   
  2008.